所以,我的问题很可能已被问到,但我不知道要搜索什么,并且没有找到太多。所以,我的问题是,我做了2个函数,它们会检查一个事件
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
我希望如果我可以做类似的事情:
while True:
Variable1 = get_pygame_events()
Variable2 = get_keys_pressed()
if Variable2 == ["w"]:
print("w")
(P.S。:while
循环只是我所做的总结)
然后,如果我按住W,那么W会一遍又一遍地打印出来,相反,当我尝试时,它会打印W一次。除非我再次按下,否则就会发生这一切。
如何通过按住W(或任何)键来识别发生的事件,并且(在这种情况下)每次通过while
循环时都会打印出来?
答案 0 :(得分:10)
使用pygame.KEYDOWN
和pygame.KEYUP
检测是否物理按下或释放了某个键。您可以使用pygame.key.set_repeat
激活键盘重复,以便在按住某个键时生成多个pygame.KEYDOWN
事件,但这很少是一个好主意。
相反,您可以使用pygame.key.get_pressed()
检查当前是否按下了某个键:
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")
答案 1 :(得分:4)
event.key == chr('a')
event.key返回键的ascii
答案 2 :(得分:2)
我建议你坚持使用事件驱动的方法而不是使用轮询机制。
你应该让关键事件改变一些内部状态以反映按下的键imo。
示例:您正在使用键盘控制太空飞船。当你按下“w”,“s”,“a”或“d”中的一个以使船在某个方向上加速时,你希望推进火箭发射:
这将有效地使对象在按下移动键时加速,并在释放按键时停止加速。
答案 3 :(得分:1)
使用pygame.key.set_repeat()。
set_repeat(延迟,间隔) - >无。
启用键盘重复时,按下的键将生成多个pygame.KEYDOWN事件。延迟是第一次重复发送pygame.KEYDOWN之前的毫秒数。之后,每隔一个毫秒发送另一个pygame.KEYDOWN。如果没有传递参数,则禁用密钥重复。