Key checking in the update function and on_key_press

59 views
Skip to first unread message

Wallace Davidson

unread,
Oct 10, 2012, 11:34:54 PM10/10/12
to pyglet...@googlegroups.com
Is it possible to have both of these in a program? I have:

@window.event
def on_key_press(symbol, modifiers):
    if symbol == key.ESCAPE:
    return pyglet.event.EVENT_HANDLED

def update(dt):
    if keys[key.W]:
        print "hi" 
        code....

But only the on_key_press function is recognised. Would it be better to have one or the other?

Adam Bark

unread,
Oct 11, 2012, 4:59:04 AM10/11/12
to pyglet...@googlegroups.com

If you're handling key presses you should use the appropriate event handler. Anything that needs to be run that isn't a user input event e.g. simulation should be scheduled with pyglet.clock.schedule, schedule_once or schedule_interval

Nathan

unread,
Oct 11, 2012, 11:10:33 AM10/11/12
to pyglet...@googlegroups.com
That is certainly possible, you just need to schedule the update(dt) function to be called -- it's not an event handler that's automatically handling some event like on_key_press(...) is.

Though as Adam already alluded to, just because it's possible doesn't mean it's necessarily the best way to do it.

~ Nathan 

Wallace Davidson

unread,
Oct 11, 2012, 4:22:50 PM10/11/12
to pyglet...@googlegroups.com
I had thought the on_key_press one was to check when a key was pressed and the update function checked whether a key was held down. Is that right? :/


--
You received this message because you are subscribed to the Google Groups "pyglet-users" group.
To post to this group, send email to pyglet...@googlegroups.com.
To unsubscribe from this group, send email to pyglet-users...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/pyglet-users?hl=en.

Richard Jones

unread,
Oct 11, 2012, 6:36:54 PM10/11/12
to pyglet...@googlegroups.com
You don't show it - did you push the keys handler (which I assume is a
KeyStateHandler) onto the window event handlers?


Richard

Nathan

unread,
Oct 11, 2012, 6:37:52 PM10/11/12
to pyglet...@googlegroups.com
On Thu, Oct 11, 2012 at 2:22 PM, Wallace Davidson <walla...@gmail.com> wrote:
I had thought the on_key_press one was to check when a key was pressed and the update function checked whether a key was held down. Is that right? :/


No.

The update function is just a function.  If you want it to be called, you need to make something call it.

~ Nathan

Wallace Davidson

unread,
Oct 11, 2012, 6:42:40 PM10/11/12
to pyglet...@googlegroups.com
Yes, I've got this: 

keys = key.KeyStateHandler()
window.push_handlers(keys)

That makes sense now, thanks for the help guys :)

Wallace Davidson

unread,
Oct 11, 2012, 6:44:49 PM10/11/12
to pyglet...@googlegroups.com
I've added this:

pyglet.clock.schedule_interval(update, 1/60.0)

and it's working fine

Adam Bark

unread,
Oct 11, 2012, 7:25:03 PM10/11/12
to pyglet...@googlegroups.com
On 11/10/12 21:22, Wallace Davidson wrote:
I had thought the on_key_press one was to check when a key was pressed and the update function checked whether a key was held down. Is that right? :/

On Fri, Oct 12, 2012 at 4:10 AM, Nathan <nathan...@gmail.com> wrote:
On Wed, Oct 10, 2012 at 9:34 PM, Wallace Davidson <walla...@gmail.com> wrote:
Is it possible to have both of these in a program? I have:

@window.event
def on_key_press(symbol, modifiers):
    if symbol == key.ESCAPE:
    return pyglet.event.EVENT_HANDLED

def update(dt):
    if keys[key.W]:
        print "hi" 
        code....

But only the on_key_press function is recognised. Would it be better to have one or the other?

That is certainly possible, you just need to schedule the update(dt) function to be called -- it's not an event handler that's automatically handling some event like on_key_press(...) is.

Though as Adam already alluded to, just because it's possible doesn't mean it's necessarily the best way to do it.

~ Nathan 

Personally, I set a flag in on_key_press and unset it in on_key_release.

Richard Jones

unread,
Oct 11, 2012, 8:04:24 PM10/11/12
to pyglet...@googlegroups.com
On 12 October 2012 10:25, Adam Bark <adam....@gmail.com> wrote:
> Personally, I set a flag in on_key_press and unset it in on_key_release.

That's all that KeyStateHandler does. It manages those flags for you :-)


Richard
Reply all
Reply to author
Forward
0 new messages