如何从Pygame事件中获取K_UP这类按键常量的字符串形式?
解决方法
方法1:手动创建按键映射字典
直接定义一个字典,把Pygame按键常量和对应的字符串名称一一对应,拿到事件的ev.key后,查字典就能得到"K_UP"格式的字符串:
# 定义按键映射字典,可根据需求添加更多按键 KEY_NAME_MAP = { pygame.K_UP: "K_UP", pygame.K_DOWN: "K_DOWN", pygame.K_LEFT: "K_LEFT", pygame.K_RIGHT: "K_RIGHT", pygame.K_SPACE: "K_SPACE", # 其他需要的按键继续补充 } # 在事件处理逻辑里使用 for event in pygame.event.get(): if event.type == pygame.KEYDOWN: # 从字典取对应字符串,未定义的按键默认返回pygame.key.name的结果 key_str = KEY_NAME_MAP.get(event.key, pygame.key.name(event.key)) # 调用你的input函数 self.input(key_str)
方法2:自动生成完整按键映射字典
如果需要覆盖所有Pygame按键,手动写字典太繁琐,可以遍历Pygame模块里所有以K_开头的属性,自动生成映射字典:
import pygame # 自动生成所有K_开头的按键常量到字符串的映射 KEY_NAME_MAP = {} for attr in dir(pygame): if attr.startswith("K_"): key_constant = getattr(pygame, attr) KEY_NAME_MAP[key_constant] = attr # 使用方式和方法1一致 for event in pygame.event.get(): if event.type == pygame.KEYDOWN: key_str = KEY_NAME_MAP.get(event.key, pygame.key.name(event.key)) self.input(key_str)
适配现有input函数
经过上面的处理,传递给input函数的key参数就是"K_UP"这类字符串,完全符合你现有函数的接收要求,不用修改原input函数逻辑,直接复用即可。
内容的提问来源于stack exchange,提问作者Kia Azad
相关产品推荐
相关产品推荐

