
-
stephen
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 useexec
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.
-
-
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!
-
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 usesuper()
. 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()
andEventManager()
, then visual testing. at this point i woud start myButtonNode()
andAnimations()
.. now i create myPlayer()
,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!;
-
stephen
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)
-
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
orfor loop
you can maintain the program and usingscene
and/orui
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
```
-
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 😎
-
stephen
@jackattack
Any chance we can get the sprite sheet your using? -
stephen
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 properlyCheckout the *** COMPOSE *** on top right when your writing a post 😀
-
stephen
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 😉