只要按下某个键,pygame运行某些东西的惯用方法是什么?使用pygame.key.get_pressed()[pygame.K_p]==True
或pygame.mouse.get_pressed()==(1,0,0)
时,它似乎只会在键或按钮被敲击时作出反应。应该使用while
循环吗?
我运行下面的代码,只有在敲击键/按钮时才能在shell中打印:
def main():
done = True
while done:
for i in pygame.event.get():
if pygame.key.get_pressed()[pygame.K_a] == 1:
print "Key a is being pressed..."
elif i.type == KEYDOWN and i.key == pygame.K_q:
done = 0
pygame.display.update()
pygame.quit()
main()
答案 0 :(得分:4)
事件KEYDOWN
表示"键从UP更改为DOWN" - 它并不代表"键始终按下"
当你开始按键时 - 它生成事件KEYDOWN
而pygame.event.get()
返回非空列表 - for
循环可以执行if pygame.event.get()
当您按住键时 - 它不会生成事件KEYDOWN
- 而pygame.event.get()
会返回空列表 - for
循环不会执行{{1} }
您的代码应该是
if pygame.event.get()
或 - 当您只需要执行一次
时running = True
while running:
# check events
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == pygame.K_q:
running = False
# do it outside of `for event` loop
# it is executed many times
if pygame.key.get_pressed()[pygame.K_a]:
print "Key is hold pressed..."
pygame.display.update()
答案 1 :(得分:2)
您应该使用:
def main():
done = False
while not done:
for i in pygame.event.get():
if i.type == KEYDOWN and i.key == pygame.K_q:
done = True
pressed = pygame.key.get_pressed()
if pressed[pygame.K_a]:
print "Key a is being pressed..."
pygame.display.update()
pygame.quit()
if __name__ == '__main__':
main()
代码中的问题是,只有在迭代所有收到的事件时才检查按下的键;因此,如果没有事件,print "Key a is being pressed..."
部分永远不会被执行。
将它放在事件循环之外。
此外,您不需要明确地与True
进行比较;惯用/ pythonic方式是使用if pressed[pygame.K_a]:
。