Ok, I think I understand better what's happening and can reformulate the "problem". I had assumed that if self[key.x]: was, in a sense, equivalent to on_key_pressed(key.x) whereas it really should be read as if_key_pressed(key.x)
As long as the key is not released, it is still pressed .... This gives an automatic "key repeat" facility - which can be great. If I had actually tried (again) astraea before posting, I would have figured it out. Sorry for the noise. André On Oct 16, 12:16 pm, "Andre Roberge" <[EMAIL PROTECTED]> wrote: > I am writing a game (frogger clone) where the main character class (inspired > by "astraea.py") inherits from key.KeyStateHandler, and deals with key > events itself. However, in doing so, I find that the key event is not > "consumed" i.e. if I press on a key to move a character, it keeps moving. > This was not the case when the key handling was all done from a window > object. I looked at the astraea.py code and can not see what I am doing > different. I did find a work around ... but I get the feeling I am missing > something obvious. Here's a brief summary of the relevant parts of the > code. > > # main script; lots of stuff left out > > frog = Frog(world) > > @win.event > def on_key_press(symbol, modifiers): > ## if symbol == key.LEFT: # this used to work as is > ## frog.step(dx = -STEP) > ## elif symbol == key.RIGHT: > ## frog.step(dx = STEP) > ## elif symbol == key.UP: > ## frog.jump(dy = JUMP) > ## elif symbol == key.DOWN: > ## frog.jump(dy = -JUMP) > if symbol == key.ESCAPE: > win.has_exit = True > > # new code to shift the relevant key handling to the main character > win.push_handlers(frog) > > while not win.has_exit: > win.dispatch_events() > win.clear() > > for f in frogs: > f.update() > > win.flip() > ######### > # code from the script where Frog is defined and updated > > class Frog(key.KeyStateHandler): > '''Our hero''' > def __init__(self, world): > super(Frog, self).__init__() > self.world = world > # much stuff deleted > > def update(self): > '''simplest case is just drawing == blitting; animation will > follow''' > if self[key.LEFT]: > self.step(dx = -STEP) > self[key.LEFT] = False # this is a workaround > elif self[key.RIGHT]: > self.step(dx = STEP) > elif self[key.UP]: > self.jump(dy = JUMP) > elif self[key.DOWN]: > self.jump(dy = -JUMP) > self.at_rest.blit(self.x, self.y) > > ####### > Any suggestion would be appreciated. > > André --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
