0

我正在使用 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)

当我按住 TOP 箭头或 DOWN 箭头时,如果我按任何左右键,什么都不会发生,elif 不会解析。为什么 ?我应该这样做吗?

如果我用“if”替换所有“elif”,则会发生相反的情况。如果我按住左或右,上下将永远无法解决。

我想了解那个奇怪的机制。

4

3 回答 3

0

因此,根据 elif 堆栈的性质,如果一个解析为 true,它不会测试其他堆栈,而只是跳过、循环如果 elif else 在某处在线工作。

因此您需要对每个使用“if”,或者将其拆分为 for 循环。

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

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

于 2014-08-02T18:18:49.637 回答
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]:


//

//用你的条件替换

于 2014-08-02T05:18:34.050 回答
0

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

TLDR:使用WASD箭头键而不是箭头键可能会更好

于 2020-08-27T19:55:14.327 回答