[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [pygame] pygame missing mouse events
Hi,
I belive that the problem is that you have a lot of return()-points in
your event-loop.
When you call pygame.event.get() you get all events in the queue as a list.
If you break the loop with a return before you have handled all given
events you will lose the rest in the list.
My 5-cents
Best Regards
/John Eriksson
2010/3/17 René Dudfield <renesd@xxxxxxxxx>:
> hi,
>
> which OS are you using?
>
> cheers,
>
> On Thu, Mar 18, 2010 at 12:58 AM, Wakefield, Robert
> <rjw03002@xxxxxxxxxxxxxx> wrote:
>>
>> I've been trying to handle mouse support using pygame, and I've found that
>> clicks are being missed outright. I've tested my code thoroughly* and the
>> problem is on the pygame end. I have included the relevant code below.
>> Thank you in advance.
>>
>> * - To be clear here, I've tried everything I can think of with no effect.
>> This includes disabling all code other than the key check in gameLoop(),
>> and also disabling the call to 'handleInputEvent()' so that only the print
>> statements remain. I still miss click events, with the print sometimes
>> giving me two presses before a release or vice versa. I only click the left
>> mouse button, so it's not a false positive, and I've checked the length of
>> the event queue and never seen it rise past single digits (sometimes 2-3 due
>> to mouse motion and other events). Framerates are fairly constant (+/- 1
>> FPS @ ~60FPS total), and Key events print a normal press/release pattern
>> just fine. The mouse issue resulted in bad code functionality, so this is a
>> serious issue for adding mouse support.
>>
>> def gameLoop():
>> done = False
>> while not done:
>> #... snip
>> res = checkKeysGUI() # check what keys are pressed, HW-level
>> #... snip
>> return 0
>>
>> def checkKeysGUI():
>> ''' check the SDL Event Queue '''
>> for event in pygame.event.get():
>> if event.type == SYSWMEVENT:
>> pass
>>
>> elif event.type == QUIT: # Quit Button, the big red X
>> handleAppQuit()
>>
>> elif(event.type == MOUSEMOTION):
>> ''' check the mouse buttons; TODO: do we need to act if mouse
>> enters/leaves window?'''
>> updateMouse(event.pos[0], event.pos[1]) # [0] = X, [1] = Y
>>
>> elif(event.type == MOUSEBUTTONUP or event.type == MOUSEBUTTONDOWN):
>> ''' we actually have a mouse click, dispatch it to handlers'''
>> pressed = (event.type == MOUSEBUTTONDOWN)
>> ''' **DEBUG ONLY** '''
>> if(pressed):
>> print('keypress')
>> else:
>> print('keyrelease')
>> if not (handleInputEvent(kdef5.MOUSEMAP[event.button],
>> pressed)):
>> return False
>>
>> elif(event.type == KEYUP or event.type == KEYDOWN):
>> ''' check the keyboard keys vs. our keymap '''
>> pressed = (event.type == KEYDOWN)
>> ''' **DEBUG ONLY** '''
>> if(pressed):
>> print('keypress')
>> else:
>> print('keyrelease')
>> if not (handleInputEvent(kdef5.KEYMAP[event.key], pressed)):
>> return False
>>
>> return True
>