如何使用 pygame.KEYDOWN 在按住键的同时每次通过循环执行某些操作? [英] How to use pygame.KEYDOWN to execute something every time through a loop while the key is held down?
问题描述
我做了 2 个函数,用于检查事件
I made 2 functions, which would check for an event
def get_pygame_events():
pygame_events = pygame.event.get()
return pygame_events
和
def get_keys_pressed(self):
keys_pressed = get_pygame_events() #pygame.event.get(pygame.KEYDOWN)
# print(keys_pressed)
keys_pressed_list = []
for event in keys_pressed:
if event.type == pygame.KEYDOWN:
if event.key == K_LEFT:
keys_pressed_list.append("left")
if event.key == K_RIGHT:
keys_pressed_list.append("right")
if event.key == K_UP:
keys_pressed_list.append("up")
if event.key == K_DOWN:
keys_pressed_list.append("down")
if event.key == K_a:
keys_pressed_list.append("a")
if event.key == K_d:
keys_pressed_list.append("b")
if event.key == K_w:
keys_pressed_list.append("w")
if event.key == K_s:
keys_pressed_list.append("s")
if event.key == K_SPACE:
keys_pressed_list.append("space")
if event.key == K_q:
keys_pressed_list.append("q")
if event.key == K_e:
keys_pressed_list.append("e")
if event.type == pygame.MOUSEBUTTONDOWN:
keys_pressed_list.append("click")
return (keys_pressed_list, event.pos)
return keys_pressed_list
我希望如果我能做类似的事情:
I expected that if I could do something similar to:
while True:
Variable1 = get_pygame_events()
Variable2 = get_keys_pressed()
if Variable2 == ["w"]:
print("w")
(那个 while
循环只是我所做的总结)
(That while
loop was just a summary of what I did)
然后如果我按住 W,w"会一遍又一遍地打印.相反,当我尝试时,它会打印 W 一次,除非我再次按下,否则就会发生这种情况.
Then if I held down W, "w" would be printed over and over and over again. Instead when I tried, it printed W once, and unless I pressed again, that is all that would happen.
我怎样才能通过按住 W(或任何)键来识别正在发生的事件,并且(在这种情况下)打印w"?每次都经过 while
循环?
How can I make it so by holding down the W (or any) key, it identifies the event happening, and (in this case) prints "w" every time it goes through the while
loop?
推荐答案
使用 pygame.KEYDOWN
和 pygame.KEYUP
来检测某个键是否被物理按下或释放.您可以通过使用 pygame.key.set_repeat
来激活键盘重复,以便在按住某个键时生成多个 pygame.KEYDOWN
事件,但这很少是一个好主意.
Use pygame.KEYDOWN
and pygame.KEYUP
to detect if a key is physically pressed down or released. You can activate keyboard repeat by using pygame.key.set_repeat
to generate multiple pygame.KEYDOWN
events when a key is held down, but that's rarely a good idea.
相反,您可以使用 pygame.key.get_pressed()
检查当前是否按下某个键:
Instead, you can use pygame.key.get_pressed()
to check if a key is currently held down:
while True:
...
pressed = pygame.key.get_pressed()
if pressed[pygame.K_w]:
print("w is pressed")
if pressed[pygame.K_s]:
print("s is pressed")
这篇关于如何使用 pygame.KEYDOWN 在按住键的同时每次通过循环执行某些操作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!