Pygame:有什么简单的方法可以找到按下的任意字母/数字吗?

5 投票
2 回答
11847 浏览
提问于 2025-04-18 02:13

我现在正在做一个游戏,需要让玩家输入他们的名字,以便在高分榜上显示。我对如何处理按键有一点了解,但我只处理过特定的按键。我想知道有没有简单的方法可以获取任何按下的键的字母,而不需要像这样做:

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 之间(包括这两个值)。

如果你按下 menuAlt GrTabLShiftpygame.key.name 会很高兴地返回 menualt grtableft 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 代表特定平台的按键代码。

撰写回答