只要按下一个键,pygame 就运行某些东西的惯用方式是什么?和pygame.key.get_pressed()[pygame.K_p]==True
or 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()
Event KEYDOWN
表示“按键状态从向上更改为向下” - 并不意味着“按键一直按住”
当您开始按键时 - 它会生成事件KEYDOWN
and pygame.event.get()
返回非空列表 - 并且for
循环可以执行if pygame.event.get()
当您按住按键时 - 它不会生成事件KEYDOWN
- and pygame.event.get()
返回空列表 - 并且for
循环不执行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()
或者 - 当你只需要执行一次某件事时
key_A_pressed = False
running = True
while running:
# check events
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == pygame.K_q:
running = False
elif event.key == pygame.K_a:
key_A_pressed = True
# it is executed only once
print "Key A - start pressing"
if event.type == KEYUP:
if event.key == pygame.K_a:
key_A_pressed = False
# it is executed only once
print "Key A - stop pressing"
# do it only once - outside of `for event` loop
# it is executed many times
#if pygame.key.get_pressed()[pygame.K_a]:
# or
if key_A_pressed:
print "Key A is held pressed..."
pygame.display.update()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)