Pygame:有没有简单的方法可以找到任何按字母数字的字母/数字?

时间:2014-04-10 15:46:25

标签: python pygame keypress

我正在努力的游戏目前需要让人们以他们的名义为高分榜提供时间。我对如何处理按键有点熟悉,但我只处理寻找特定的按键。是否有一种简单的方法可以在不必执行此操作的情况下按下任何键的字母:

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 个答案:

答案 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将很高兴返回menualt grtableft 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