Pygame:有什么简单的方法可以找到按下的任意字母/数字吗?
我现在正在做一个游戏,需要让玩家输入他们的名字,以便在高分榜上显示。我对如何处理按键有一点了解,但我只处理过特定的按键。我想知道有没有简单的方法可以获取任何按下的键的字母,而不需要像这样做:
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'
虽然这样做是可以的,但我觉得还有更有效的方法。我就是找不到或者想不出来该怎么做。
2 个回答
1
如果你看看 K_a,它的值是 97,这就是字母 'a' 的 ASCII 码。我可以推测 K_? 是问号所代表的字符的 ASCII 码。
if event.type == KEYUP:
print chr(event.key) #convert ascii code to a character
也许是这样?
正如提到的,这个方法对 ASCII 码大于 255 的字符不适用(那就不算真正的 ASCII 了)。
你可以使用下面提到的方法,或者直接用 unichr(event.key)
来代替 chr
。
13
基本上有两种方法:
选项 1:使用 pygame.key.name()
。
这非常简单:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
print(pygame.key.name(event.key))
这个方法的好处是,使用 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)
这个方法可以让你得到字母或数字,或者在使用功能键时返回一个空字符串。同时,它也会考虑到修饰键,比如如果你在按下字母 a 的时候按住 Shift,它会返回 A
而不是 a
。
pygame.KEYDOWN 事件还有额外的属性 unicode 和 scancode。unicode 代表一个单字符字符串,就是你输入的完全翻译后的字符。这会考虑到 Shift 键和组合键。scancode 代表特定平台的按键代码。