On Jan 2, 4:58 pm, Jonathan Hartley <[email protected]> wrote: > On Jan 2, 6:29 am, Dummey <[email protected]> wrote: > > > I am currently trying to create a character that can face left/right > > and while facing in these directions walk/jump. A basic side scrolling > > character. > > > Now my question is, how should I build my character class? My original > > thought was to extend the sprite class and just alter the image that > > is inside that sprite to the one that I need. While this seems to work > > for still images, animations do not run. Is there a convention on how > > I should be approaching this? An example would also be great, most of > > the games that I have been studying only end up using rotate. > > Hey there, I don't know much about much, but for the record, you > shouldn't need to extend the sprite class to change the image that is > displayed. Just re-assign to the sprite.image attribute as and when > you need a different image displayed. I use this for left/right facing > images, but presumably you could entirely manage manual animation this > way - but the logic is outside the (unmodified) Sprite class, in your > own code.
Actually, come to think of it, I already do use this for manual sprite animation. My code possibly isn't the best use of the pyglet API, but for what it's worth: http://code.google.com/p/brokenspell/source/browse/trunk/gamelib/spriteitem.py The shown SpriteItem class is an in-game entity which is rendered using a pyglet Sprite. Concrete in-game items (eg. 'Bird', 'Feather', etc) inherit from this. The 'animate()' method assigns to sprite.image as described. Note self.images is a class-level list of images, assigned on application start-up, and self.frame_idx is an attribute that each instance assigns to when they want to display a particular frame of animation. Note that animate() is a little contorted: It used to assign to sprite.x, sprite.y, sprite.rotation, sprite.image, but I found each of these invoked sprite._update_position(), which is a bunch of recalculation logic. Hence for performance I now assign to sprite._x, sprite._y, etc (note the underscores), and then call sprite._update_position() myself manually. If this is a silly thing to do, I'm all ears. I didn't measure the performance, it just looked like a lot of lines, but doubtless isn't very expensive in practice. Best regards. -- You received this message because you are subscribed to the Google Groups "pyglet-users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/pyglet-users?hl=en.
