2014-12-05 79 views
0

我目前正在用pygame做游戏,但是当我改变方向时,我停下来,不得不再次按下箭头键。这似乎不是一个大问题,但它会很容易变得烦人。pygame我可以移动我的角色但不是很大

这是代码(这是写在游戏中的循环,所以这不是一个问题):

if event.type == pygame.KEYDOWN: 
    if event.key == K_LEFT: 
     coordsX = coordsX - 0.1 

    elif event.key == K_RIGHT: 
     coordsX = coordsX + 0.1 

    elif event.key == K_UP: 
     coordsY = coordsY - 0.1 

    elif event.key == K_DOWN: 
     coordsY = coordsY + 0.1 

    elif event.key == K_LEFT and event.key == K_UP: 
     coordsX = coordsX - 0.1 
     coordsY = coordsY - 0.1 

    elif event.key == K_LEFT and event.key == K_DOWN: 
     coordsX = coordsX - 0.1 
     coordsY = coordsY + 0.1 

    elif event.key == K_RIGHT and event.key == K_UP: 
     coordsX = coordsX + 0.1 
     coordsY = coordsY - 0.1 

    elif event.key == K_RIGHT and event.key == K_DOWN: 
     coordsX = coordsX + 0.1 
     coordsY = coordsY + 0.1 
+0

的活动,请不要直接作用,但你的x和y的速度存储在变量。 – usr2564301 2014-12-05 23:20:39

+0

我认为事件在第一次沮丧时触发一次。当密钥被释放后,将会有一个单独的密钥事件。您需要存储一些状态,以便在key_down发生时记录“向左移动”,然后当释放该键时,停止向左移动。此时,当您第一次按下按键时,您只需向左移动一次,但代码中的任何内容都不会继续移动,直到释放按键。 – 2014-12-06 00:01:05

回答

0

对于这种情况,你可能当按键被按下或它们的顺序无所谓,但您确实想知道哪些按键被按下。相反,你可能想看看pygame.key.get_pressed。然后

主循环看起来会像这样

pygame.event.pump() 
keys = pygame.key.get_pressed() 
if keys[K_LEFT]: 
    coordsX -= 0.1 
if keys[K_RIGHT]: 
    coordsX += 0.1 
... 

而且,这里使用ELIF跳过和条件将自己照顾自己。

1

我的意思上面我的评论的一个例子:

if event.type == pygame.KEYDOWN: 
    if event.key == K_LEFT: 
     moving_left = True 
    elif event.key == K_RIGHT: 
     moving_right = True 
    elif .... 

elif event.type == pygame.KEYUP: 
    if event.key == K_LEFT: 
     moving_left = False 
    elif event.key == K_RIGHT: 
     moving_right = False 
    elif .... 

if moving_left: 
    coordsX = coordsX - 0.1 
if moving_right: 
    coordsX = coordsX + 0.1 
if ... 
相关问题