Pygame多键怪异的行为

时间:2014-08-02 05:07:15

标签: pygame multikey

我正在使用pygame制作游戏,但我遇到了以下代码的问题:

while not self.end: # main game loop
        keys = pygame.key.get_pressed()
        if keys[K_LEFT]:
            adddirection(LEFT)
        elif keys[K_RIGHT]:
            adddirection(RIGHT)
        elif keys[K_UP]:
            adddirection(UP)
        elif keys[K_DOWN]:
            adddirection(DOWN)

当我按住向上箭头或向下箭头时,如果我按任意向右或向左键,则不会发生任何事情,elif无法解析。为什么?我应该采取另一种方式吗?

如果我用“if”替换所有'elif',则会发生相反的情况。如果我向左或向右按​​住,则上下都不会结算。

我想了解那个奇怪的机械师。

3 个答案:

答案 0 :(得分:0)

代码就像

for event in pygame.event.get():
    if event.type==QUIT:
        pygame.quit()
        sys.exit()

    if event.type == KEYDOWN:
        if (event.key == K_LEFT):
            //
        elif (event.key == K_RIGHT):
            //
        elif (event.key == K_UP):
            //
        elif (event.key == K_DOWN):
            //

keys_pressed = key.get_pressed()

if keys_pressed[K_LEFT]:
 //

if keys_pressed[K_RIGHT]:


if keys_pressed[K_UP]:
//

if keys_pressed[K_DOWN]:


//

//替换为您的条件

答案 1 :(得分:0)

所以,根据elif堆栈的性质,如果一个解析为true,它就不会测试其他的并且只是跳过,如果elif else在某个地方在线工作就会循环。

所以你需要使用"如果"对于每个,或将其拆分为for循环。

但是,既然你说当你对所有人使用if时,你仍然没有得到你预期的行为。我怀疑这可能是由" adddirection()"引起的,如果你不能解决这个问题,你也可以发帖吗?

正如另一个答案中所提到的,你也可以使用pygame事件来处理按键

答案 2 :(得分:0)

该问题可能无法解决。键盘的工作方式是每个键都通过USB电缆在铜线上发送信号。机械(游戏)键盘的每个键都有一条铜线,但是,为降低廉价键盘的成本,许多键共用一根线,结果,一次只能按下共享一根线的键之一。箭头键在同一根线上,这可能会导致您遇到问题。 WASD通常用于游戏中移动的原因是因为4个键沿不同的导线延伸。

TLDR:使用WASD而不是箭头键可能会带来更好的运气