我正在使用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',则会发生相反的情况。如果我向左或向右按住,则上下都不会结算。
我想了解那个奇怪的机械师。
答案 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
而不是箭头键可能会带来更好的运气