pygame键被按下 [英] Pygame key getting pressed
问题描述
只要按键被按下,对pygame说来运行某些东西的惯用方式是什么?使用pygame.key.get_pressed()[pygame.K_p]==True
或pygame.mouse.get_pressed()==(1,0,0)
似乎仅在按键或按钮敲动时做出反应.例如,应该使用while
循环吗?
What is the idiomatic way of saying to pygame to run something as long as a key is being pressed? With pygame.key.get_pressed()[pygame.K_p]==True
or pygame.mouse.get_pressed()==(1,0,0)
it seems to react only as the key or the button get strocken. Should one use a while
loop for example?
我运行下面的代码,只有敲击按键/按钮,我才能在外壳中打印:
I run the code below and i get print in the shell only upon strocking the key/button:
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()
推荐答案
事件KEYDOWN
表示键的状态从UP变为DOWN"-并不意味着键一直处于按下状态"
Event KEYDOWN
means "key changed state from UP to DOWN" - it doesn't means "key is held pressed all time"
当您开始按下键时-会生成事件KEYDOWN
,而pygame.event.get()
返回的列表不会为空-并且for
循环可以执行if pygame.event.get()
When you start pressing key - it generate event KEYDOWN
and pygame.event.get()
returns not empty list - and for
loop can execute if pygame.event.get()
按住键时-它不会生成事件KEYDOWN
-并且pygame.event.get()
返回空列表-并且for
循环不会执行if pygame.event.get()
When you hold key pressed - it doesn't generate event KEYDOWN
- and pygame.event.get()
returns empty list - and for
loop doesn't execute 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()
或-当您只需要执行一次操作
or - when you need to execute something only once
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()
这篇关于pygame键被按下的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!