• stephen

    @etalamo

    You can use editor module to get selected text range and then split the lines into a list. last you should be able to iterate the list and use exec to run each line. Alterativly you could create a temp script at run time then write the selected code to that script then run the scriot. just make ure to save the stream and close it.

    if you need an example i can write one up for you but this should get you in the right direction.

    posted in Pythonista read more
  • stephen

    @Bumbo-Cactoni

    I am too!! Lol

    Already started on section 1 chapter 1 🤓🤓

    posted in Pythonista read more
  • stephen

    After many hours of thought and going over my cose a few times i fiund that since
    I already released the Game Example Space Escape, its nearly pointless to do
    a tutorial series on the same project.. That said i will be closing this one here
    and i will create a new one.

    PYTHON RPG

    Python RPG will cover at more aspects of game development.

    • Sprite Animations
    • Inventory System
    • NPC Economics
    • Combat System

    and much more..

    This new series will be done in sections due to the amount of code and testing we will
    need. i will provide sprite sheets to help follow along, though i do encourage using your
    own assets to help motivate yourself to push on. game development can get pretty stressfull
    and even make you feel like its too hard. but keep pushing along and ALWAYS ask a question
    if you have one!

    Keep note that i will be writing this on my own and do have a life outside Python, at least i
    like to think i do...
    so there might be gaps in time between sections and chapters. 🤓

    Lets get started!

    posted in Pythonista read more
  • stephen

    @jackattack said:

    Also the only bit I didn’t really understand was when you set up the button class you used init, but then you did spritenode.init what is this for?

    when you subclass an object that has __init__ paramiters you must either call the Parent class __init__ as i did here or you can use super(). if you do not call the parent's __init__ then the new object will not inherit the dirived.


    @jackattack said:

    I’ve learnt so much reading your code, love the way you’ve done so many things, spent ages going through it all. Could you give me any insight into the order you went about writing it?

    I usually start with utility classes. in my Example game this would be stuff like Screen() and EventManager(), then visual testing. at this point i woud start my ButtonNode() and Animations().. now i create my Player(), GUI() and o on. the order on the script itself doesnt matter with Object Orientated Programing (OOP) just remember the Interpreter exec the scripts top down. so in order to Dirive from from Class A it must exist before Class B.


    @jackattack said:

    Wow this works perfectly thank you so much, I’m going to take some time to study it and try to learn how to recreate it with some other effects. Thanks for taking the time out 😌

    Not a problem at all! 🥂💯 i enjoy helping others if you have any equestions please dont hesitate!;

    posted in Pythonista read more
  • stephen

    @jackattack

    here is my script example. sorry it took a while lol. its not very clean but i think it should be easy to follow. let me know if you have any questions. you should benable to use thenSprite class to create other objects and as you will see this approach doesnt use the update method at all or depend on position.

    
    from scene import *
    from time import sleep
    import sound
    import random
    import math
    
    A = Action
    
    Character_Male='IMG_3039.jpg'
    
    def get_texture(sheet, x, y, w, h):
        '''
        for cleaner Code
        '''
        return Texture(sheet).subtexture(Rect(x, y, w, h))
    
    
    class Direction:
        '''
        simple Constants
        '''
        NORTH="north"
        SOUTH="south"
        EAST="east"
        WEST="west"
    
    class Sprite(SpriteNode):
        '''
        Use this class for game objects
        '''
        def __init__(self,sprite_sheet, *args, **kwargs):
            self.sprite_sheet=sprite_sheet
            self.animations=dict(
                {"idle":get_texture(self.sprite_sheet, 0.00, 0.75, 0.33, 0.25)})
            SpriteNode.__init__(self, texture=self.animations["idle"], *args, **kwargs)
            
            self.movement_speed=50
            self.active_direction=Direction.SOUTH
            self.Texture_Group(
                "move-north", 
                [
                    get_texture(self.sprite_sheet, 0.00, 0.75, 0.33, 0.25),
                    get_texture(self.sprite_sheet, 0.33, 0.75, 0.33, 0.25),   
                    get_texture(self.sprite_sheet, 0.66, 0.75, 0.33, 0.25)
                ])
            self.Texture_Group(
                "move-south", 
                [
                    get_texture(self.sprite_sheet, 0.00, 0.50, 0.33, 0.25),
                    get_texture(self.sprite_sheet, 0.33, 0.50, 0.33, 0.25),
                    get_texture(self.sprite_sheet, 0.66, 0.50, 0.33, 0.25)
                ])
            self.Texture_Group(
                "move-east", 
                [
                    get_texture(self.sprite_sheet, 0.00, 0.25, 0.33, 0.25),
                    get_texture(self.sprite_sheet, 0.33, 0.25, 0.33, 0.25),
                    get_texture(self.sprite_sheet, 0.66, 0.25, 0.33, 0.25)
                ])
            self.Texture_Group(
                "move-west", 
                [
                    get_texture(self.sprite_sheet, 0.00, 0.00, 0.33, 0.25),
                    get_texture(self.sprite_sheet, 0.33, 0.00, 0.33, 0.25),
                    get_texture(self.sprite_sheet, 0.66, 0.00, 0.33, 0.25)
                ])
            
            
        # decorator alows the use of time.sleep() without blocking     
        @ui.in_background
        def Run_Animation(self, tag):
            for x in self.animations[f"{tag}-{self.active_direction}"]:
                self.texture = x
                sleep(0.2)
            self.texture=self.animations[f"{tag}-{self.active_direction}"][0]
        
        def Texture_Group(self, tag, texture_list):
            self.animations[tag]=texture_list
        
        def Change_Direction(self, direction):
            self.active_direction=direction
            if direction == Direction.SOUTH:
                self.velocity=(0.0, -self.movement_speed)
            elif direction == Direction.NORTH:
                self.velocity=(0.0, self.movement_speed)
            elif direction == Direction.EAST:
                self.velocity=(-self.movement_speed, 0.0)
            elif direction == Direction.WEST:
                self.velocity=(self.movement_speed, 0.0)
    
    
    class Button(SpriteNode):
        '''
        Simple Button Object
        '''
        def __init__(self, text, meta, action=None, *args, **kwargs):
            SpriteNode.__init__(self, Texture('pzl:Gray7'), *args, **kwargs)
            self.texture=Texture('pzl:Gray7')
            self.action=action
            self.text=LabelNode(text, anchor_point=(0.5, 0.5), color="yellow", parent=self)
    
            self.meta=meta
        
        # Not used in this example but can be lol
        def Pressed(self):
            self.action(self)
    
    class MyScene (Scene):
        def setup(self):
            self.screen="game"
            self.background_color='black'
            self.buttons=[]
            
            self.player=Sprite(Character_Male, position=self.size/2, scale=4, parent=self)
            
            self.n = -1
            
            
            self.up_button=Button(
                "↑",
                Direction.NORTH,
                position=Point(get_screen_size()[0]/4*3, 270),
                scale=2,
                parent=self)
            self.buttons.append(self.up_button)
            
            self.down_button=Button(
                "↓",
                Direction.SOUTH,
                position=Point(get_screen_size()[0]/4*3, 130),
                scale=2,
                parent=self)
            self.buttons.append(self.down_button)
            
            self.right_button=Button(
                "→",
                Direction.WEST,
                position=Point(get_screen_size()[0]/4*3+70, 200),
                scale=2,
                parent=self)
            self.buttons.append(self.right_button)
            
            self.left_button=Button(
                "←",
                Direction.EAST,
                position=Point(get_screen_size()[0]/4*3-70, 200),
                scale=2,
                parent=self)
            self.buttons.append(self.left_button)
            
        def touch_began(self, touch):
            for btn in self.buttons:
                if touch.location in btn.bbox:
                    self.player.Change_Direction(btn.meta)
                    self.player.run_action(
                        Action.move_by(
                            self.player.velocity[0],
                            self.player.velocity[1]))
                    self.player.Run_Animation("move")
            
        def touch_ended(self, touch):
            pass
            
            
    if __name__ == '__main__':
        run(MyScene(), show_fps=True)
    

    posted in Pythonista read more
  • stephen

    If your running an example script chances are it is executing and doing some function but has no visual presentation and exec in less then a second. if you use scene, ui, while or for loop you can maintain the program and using scene and/or ui modules to present visual presence.

    post your code and that will help us help you. use MarkDown to format the code. before and after place ```

    posted in Pythonista read more
  • stephen

    @jackattack said:

    Sure can do, what format can I post it on here?

    You will have to upload somewhere then hyperlink it. I personally use Imgur

    @jackattack said:

    I basically just cropped one from online to make it easier to work with

    no problem its just to help replicate the same execution you have 😎

    posted in Pythonista read more
  • stephen

    @jackattack
    Any chance we can get the sprite sheet your using?

    posted in Pythonista read more
  • stephen

    @jackattack

    Also can you post the code you are using just in case it's just a small mishap? Make sure to put the code inside two ``` so that it is formatted properly

    Checkout the *** COMPOSE *** on top right when your writing a post 😀

    posted in Pythonista read more
  • stephen

    @jackattack

    Hey buddy! I have a "full" example game for new developers to take a look at here on the forums. He game doesn't use sprite sheets but it should give you a good understanding of the animation system 😀

    While you look this over I will prepare an example for your specific use and give some comment explanation of what's going on! I got 4 kiddos so just bare with me lol I'm not as fast as I used to be buddy!

    Here Is the post for the example Game 😉

    posted in Pythonista read more

Internal error.

Oops! Looks like something went wrong!