我正在努力的游戏目前需要让人们以他们的名义为高分榜提供时间。我对如何处理按键有点熟悉,但我只处理寻找特定的按键。是否有一种简单的方法可以在不必执行此操作的情况下按下任何键的字母:
for event in pygame.event.get():
if event.type == KEYUP:
if event.key == K_a:
newLetter = 'a'
elif event.key == K_b:
newLetter = 'b'
...
elif event.key == K_z:
newLetter = 'z'
虽然这样可行,但我觉得有一种更有效的方法。我无法弄清楚或找到任何指南。
答案 0 :(得分:8)
基本上有两种方式:
选项1:使用pygame.key.name()
。
就像
一样简单for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
print(pygame.key.name(event.key))
使用chr
的优势在于chr
仅在event.key
的值介于0和255(含)之间时才有效。
如果按 menu , Alt Gr , Tab 或 LShift ,pygame.key.name
将很高兴返回menu
,alt gr
,tab
和left shift
,而chr
将崩溃,崩溃,返回空格并崩溃。
选项2:使用pygame.KEYDOWN
事件的unicode
属性
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
print(event.unicode)
使用功能键时,它会为您提供字母/数字或空字符串,并且还会考虑修饰符,例如如果按住Shift键的同时按住它将返回A
而不是a
。
pygame.KEYDOWN事件具有其他属性unicode和 扫描码。 unicode表示单个字符串 完全翻译的字符输入。这考虑了这种转变 和组成键。 scancode表示特定于平台的密钥 代码。
答案 1 :(得分:1)
如果你看K_a只是97那个'a'的ascii代码,我会推断为K_?是问号所代表的ascii代码
if event.type == KEYUP:
print chr(event.key) #convert ascii code to a character
可能?
指出这不适用于超过255的ascii(不再是ascii)
您可以使用下面列出的方法,或者只使用unichr(event.key)
代替chr