【问题标题】:is there a more efficient version of pygame.key.get_pressed(pygame.K) [duplicate]是否有更有效的 pygame.key.get_pressed(pygame.K) 版本 [重复]
【发布时间】:2021-08-27 11:36:05
【问题描述】:

这是我的 pygame 代码中字母表的一部分。 它工作得很好,但占用了很多线条并且看起来很丑。它也不便携。 我尝试为其创建一个函数,可以将字母添加到任何变量,而不仅仅是我的“用户名”,但没有成功。

event_list = pygame.event.get()

for event in event_list:

    pressed = pygame.key.get_pressed()

    if pressed[pygame.K_a]:
        username += "a"
    if pressed[pygame.K_b]:
        username += "b"
    if pressed[pygame.K_c]:
        username += "c"
    # ....... etc etc

有人对我如何将它变成一个函数有任何建议吗?

【问题讨论】:

    标签: python function pygame


    【解决方案1】:

    键盘事件KEYDOWNKEYUP(参见pygame.event 模块)创建一个带有附加属性的pygame.event.Event 对象。按下的键可以从key 属性(例如K_RETURN K_a)获得,mod 属性包含带有附加修饰符的位集(例如KMOD_LSHIFT)。 unicode 属性提供键盘输入的 Unicode 表示。

    例如:

    def input_text(event_list, name):
        
        finished = False
        for event in event_list:
            if event.type == pygame.KEYDOWN:
           
                if event.key == pygame.K_RETURN:
                    finished = True
                else:
                    name += event.unicode
    
        return (finished, name)
    

    在应用循环中调用input_text函数:

    username = ""
    password = ""
    current_input = "username"
    
    run = True
    while run:
        event_list = pygame.event.get()
        for event in event_list:
            if event.type == pygame.QUIT:
                run = False
    
        if current_input == "username":
            finished, username = input_text(event_list, username)
            if finished:
                current_input = "password"
    
        elif current_input == "password":
            finished, password = input_text(event_list, password)
            if finished:
                current_input = ""
    

    【讨论】:

      【解决方案2】:

      您可以轻松获取按下的键的名称:

      for event in event_list:
          if event.type == pygame.KEYDOWN:
              name = pygame.key.name(event.key)
              if len(name) == 1:  #  Check if it is a character
                  username += pygame.key.name(event.key)
      

      【讨论】:

        猜你喜欢
        • 2020-07-15
        • 2021-10-09
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 2013-01-26
        • 2021-01-24
        • 2011-05-07
        相关资源
        最近更新 更多