[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
>