2013-06-03 58 views
1

我在我的程序中遇到了一些鍵盤事件的麻煩。長話短說我使用pygame.KEYDOWN事件,但幾乎每個人都聽說get_pressed()是一個更好的選擇。因此,我改變了我的代碼,但遇到了一些問題Get_Pressed行爲奇怪

首先:

如果我抱着兩個鍵,但那麼只有釋放一個,pygame的出於某種原因認爲,我已經從釋放。這意味着,對角運動是一個痛苦的實施

其次:

對角線運動工作,但只在某些情況下,當:

我上下移動並按住左或右

如果我要向左或向右它不會(出於某種原因)工作,並保持向上或向下

這是我一直在使用的代碼:

while done == False: 
for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
     done = True 
keys = pygame.key.get_pressed() 
if (keys[K_KP6]): 
    square.spd_x+=5 
    if square.spd_x > 5: # Put these speed limits in a function 
     square.spd_x = 5 
elif (keys[K_KP4]): 
    square.spd_x -=5 
    if square.spd_x <-5: 
     square.spd_x = -5 
elif (keys[K_KP8]): 
    square.spd_y -=5 
    if square.spd_y <-5: 
     square.spd_y = -5 
elif (keys[K_KP2]): 
    square.spd_y +=5 
    if square.spd_y >5: 
     square.spd_y = 5 
else: 
    square.spd_x = 0 
    square.spd_y = 0 

如果任何人都可以在這個問題上闡明我會非常感激,我非常感謝你對試圖回答

謝謝:d

+0

我認爲這個問題可能是因爲你在所有事情之後都有elifs,所以它說:如果上或下,然後忽略左或右。它可能應該是如果up:moveup elif down:movingown else:setverticalmovementto0如果離開:moveleft elif right:moveright else:sethorizo​​ntalmovementto0,以便區分水平和垂直移動。 (哎呀,剛剛看到pygamenerd說,首先,我的壞) – Chachmu

回答

1

我不知道這是否會工作,但值得一試。

while done == False: 
for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
     done = True 
keys = pygame.key.get_pressed() 
if (keys[K_KP6]): 
    square.spd_x=5 
else: 
    square.spd_x=0 
if (keys[K_KP4]): 
    square.spd_x-=5 
if (keys[K_KP8]): 
    square.spd_y=-5 
else: 
    square.spd_y=0 
if (keys[K_KP2]): 
    square.spd_y +=5 

讓我知道它是否有效。

+0

這工作完美,甚至修復了我遇到的其他問題,非常感謝! –