【问题标题】:is there a more efficient version of pygame.key.get_pressed(pygame.K) [duplicate]是否有更有效的 pygame.key.get_pressed(pygame.K) 版本 [重复]
【发布时间】:2021-08-27 11:36:05
【问题描述】:
这是我的 pygame 代码中字母表的一部分。
它工作得很好,但占用了很多线条并且看起来很丑。它也不便携。
我尝试为其创建一个函数,可以将字母添加到任何变量,而不仅仅是我的“用户名”,但没有成功。
event_list = pygame.event.get()
for event in event_list:
pressed = pygame.key.get_pressed()
if pressed[pygame.K_a]:
username += "a"
if pressed[pygame.K_b]:
username += "b"
if pressed[pygame.K_c]:
username += "c"
# ....... etc etc
有人对我如何将它变成一个函数有任何建议吗?
【问题讨论】:
标签:
python
function
pygame
【解决方案1】:
键盘事件KEYDOWN 和KEYUP(参见pygame.event 模块)创建一个带有附加属性的pygame.event.Event 对象。按下的键可以从key 属性(例如K_RETURN 、K_a)获得,mod 属性包含带有附加修饰符的位集(例如KMOD_LSHIFT)。 unicode 属性提供键盘输入的 Unicode 表示。
例如:
def input_text(event_list, name):
finished = False
for event in event_list:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
finished = True
else:
name += event.unicode
return (finished, name)
在应用循环中调用input_text函数:
username = ""
password = ""
current_input = "username"
run = True
while run:
event_list = pygame.event.get()
for event in event_list:
if event.type == pygame.QUIT:
run = False
if current_input == "username":
finished, username = input_text(event_list, username)
if finished:
current_input = "password"
elif current_input == "password":
finished, password = input_text(event_list, password)
if finished:
current_input = ""
【解决方案2】:
您可以轻松获取按下的键的名称:
for event in event_list:
if event.type == pygame.KEYDOWN:
name = pygame.key.name(event.key)
if len(name) == 1: # Check if it is a character
username += pygame.key.name(event.key)