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.


Reply via email to