【问题标题】:Pygame: Is there any easy way to find the letter/number of ANY alphanumeric pressed?Pygame:有什么简单的方法可以找到按下的任何字母数字的字母/数字吗?
【发布时间】:2014-04-10 15:46:24
【问题描述】:

我目前正在开发的游戏需要让人们以他们的名义为高分榜腾出时间。我对如何处理按键有点熟悉,但我只处理过寻找特定的按键。有没有一种简单的方法可以让按下任何键的字母而不必做这样的事情:

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'

虽然这可行,但我觉得有一种更有效的方法来解决它。我只是想不通或找不到任何关于它的指南。

【问题讨论】:

    标签: python pygame keypress


    【解决方案1】:

    基本上有两种方式:

    选项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(含)之间时才有效。

    如果你按 menuAlt GrTabLShiftpygame.key.name 将愉快地返回 @ 987654329@、alt grtableft shift,而chr 会崩溃、崩溃、返回空白和崩溃。


    选项2:使用pygame.KEYDOWN事件的unicode属性

    for event in pygame.event.get():
      if event.type == pygame.KEYDOWN:
        print(event.unicode)
    

    使用功能键时,它会为您提供字母/数字或空字符串,并且还会考虑修饰符,例如如果您在按住 Shift 的同时按 a,它将返回 A 而不仅仅是 a

    pygame.KEYDOWN 事件有额外的属性 unicode 和 扫描码。 unicode 表示单个字符串,即 输入完全翻译的字符。这考虑到了转变 和组合键。 scancode 表示特定于平台的键 代码。

    【讨论】:

      【解决方案2】:

      如果你看 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

      【讨论】:

      • 我建议不要使用chr,因为如果event.key`的值大于255会崩溃;特别是如果有一个库函数可以很好地处理这种情况。
      • 是的,这是一个好点......使用 unichr 也应该解决这个问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多