我正在尝试使用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事件队列。我的结果更加令我困惑。如果我斜向向下和向右移动角色,先按下向下键再按下向右键,然后释放向右键使其向下简单移动,角色停止移动如之前所述...但是这被打印到shell中:
(1, 0)
[]
也就是说,当我释放右箭头键并仍按住下箭头键时,pygame.key.get_pressed() 会理解为下箭头键仍被按住,但事件队列中没有任何内容。
此外,在代码早期(在控制循环之前),我正在调用
pygame.key.set_repeat(1, 2)
让角色在按住键的同时继续移动。
任何帮助都将不胜感激!谢谢:)