[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Odd Little pygame.event Bug?



My keyboard has always done that too. Most keyboards have problems like 
that.

A good workaround is to use CTRL instead of space. CTRL mixes better 
with arrow keys on almost all computers.

I have also had good luck with Z and X on many keyboards, in case you 
need more keys.

---
James Paige

On Mon, Apr 16, 2007 at 09:43:06PM -0400, Kris Schnee wrote:
> While playing with my little game framework, I found I could jump in 
> each of eight compass directions, except northwest. Investigating the 
> problem, I found that when my character was moving northwest (angle 315, 
> where 0 is north and 90 is east), the "Jump" function wasn't getting 
> called. So I told the main input loop to print a message whenever the 
> Space (jump) key was hit.
> 
> According to Pygame, it seems, hitting the Space key while the Up and 
> Left arrows are held down doesn't generate a KEYDOWN event! Yet there 
> seems to be no problem with hitting another key, or at least K or 
> LSHIFT, with this arrow combination, or with any other arrow combination.
> 
> Below is a test script that replicates the error. Am I overlooking 
> something obvious here, or is there a glitch in pygame.event?
> 
> Kris
> 
> <code>
> 
> import pygame
> from pygame.locals import *
> pygame.init()
> screen = pygame.display.set_mode((640,480))
> 
> """
> Run a standard Pygame event loop with a blank screen. ESC to exit.
> The loop prints what "angle" you're holding down with the arrow keys,
> whenever you hit Space, LSHIFT, or K.
> The error is that hitting Space while holding Left and Up doesn't seem
> to generate a KEYDOWN event!
> """
> 
> done = False
> while not done:
> 
>     report_angle = False
> 
>     ## Handle events.
>     keys_pressed = pygame.key.get_pressed() ## Keys that're down.
> 
>     for event in pygame.event.get():
>         if event.type == QUIT:
>             done = True
>         elif event.type == KEYDOWN:
>             print "A key was hit: "+str(event.key)
>             if event.key == K_ESCAPE:
>                 done = True
> 
>             ## This doesn't seem to work!
>             elif event.key == K_SPACE:
>                 print "Pressed Space."
>                 report_angle = True
> 
>             ## This one works.
>             elif event.key == K_LSHIFT:
>                 print "Pressed LeftShift."
>                 report_angle = True
> 
>             ## This one works fine.
>             elif event.key == K_k:
>                 print "Pressed K."
>                 report_angle = True
> 
>     if report_angle:
>         move_x, move_y = 0, 0
>         if keys_pressed[ K_UP ]:
>             move_y = 1
>         elif keys_pressed[ K_DOWN ]:
>             move_y = -1
>         if keys_pressed[ K_LEFT ]:
>             move_x = -1
>         elif keys_pressed[ K_RIGHT ]:
>             move_x = 1
>         angle = 
> {(0,0):None,(0,-1):180,(0,1):0,(-1,0):270,(1,0):90,(-1,1):315,(1,1):45,(-1,-1):225,(1,-1):135}[(move_x,move_y)]
>         print "Angle: "+str(angle)
> 
>     pygame.display.update()
> 
> pygame.display.quit()
> 
> 
> </code>
>