我正在尝试为使用 Python 中的 pygame 的应用程序制定简单的控件。我已经掌握了基础知识,但我遇到了一个奇怪的墙:我正在使用箭头键来控制我的角色。如果我按住一个箭头键,然后按住另一个箭头键(沿对角线移动),角色会按预期移动。但是,如果我释放我按下的第二个键(同时仍然按住第一个键),即使我仍然按住第一个键,角色也会停止移动。这是我的简单运动代码:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if pygame.key.get_pressed()[K_LEFT]:
player.pos = (player.pos[0] - 2, player.pos[1])
if pygame.key.get_pressed()[K_RIGHT]:
player.pos = (player.pos[0] + 2, player.pos[1])
if pygame.key.get_pressed()[K_UP]:
player.pos = (player.pos[0], player.pos[1] - 2)
if pygame.key.get_pressed()[K_DOWN]:
player.pos = (player.pos[0], player.pos[1] + 2)
现在,我自然对此感到非常困惑。所以我尝试打印一些行来调试。在主控制循环的顶部,我写道:
print (pygame.key.get_pressed()[K_DOWN], pygame.key.get_pressed()[K_RIGHT])
print pygame.event.get()
...输出一个显示向下和向右箭头键状态的元组,然后显示 pygame 事件队列。我的结果更让我困惑。如果我沿对角线向下和向右移动角色,先按向下键,然后按右键,然后释放右键使其简单地向下移动,角色像以前一样停止移动......但这会打印到外壳上:
(1, 0)
[]
也就是说,当我松开右箭头键并仍然按住向下箭头键时,pygame.key.get_pressed() 明白向下箭头键仍在按住,但事件队列中没有任何内容。
另外,在代码的前面(在控制循环之前)我正在调用
pygame.key.set_repeat(1, 2)
使角色在按住键的同时继续移动。
任何帮助将不胜感激!谢谢 :)