这段代码会发生什么?

时间:2015-01-22 03:52:34

标签: python events pygame

我一直在努力学习python。但是不太了解事件语法发挥作用的部分。请解释它需要什么样的值等,以及如何将它与0等整数值进行比较。

def checkForKeyPress():
    if len(pygame.event.get(QUIT)) > 0:
        terminate()
    keyUpEvents = pygame.event.get(KEYUP)
    if len(keyUpEvents) == 0:
        return None
    if keyUpEvents[0].key == K_ESCAPE:
        terminate()
    return keyUpEvents[0].key

1 个答案:

答案 0 :(得分:3)

我想我已经过度回答了你的问题。 pygame.event.get()返回一个列表对象,其中包含零个或多个事件。 len()返回该列表中的项目数 - 将其与0进行比较会告诉您有关列表的空白或其他内容的信息。

def checkForKeyPress():

    #if I retrieve at least one quit event since I last checked
    if len(pygame.event.get(QUIT)) > 0: 
        #quit the game
        terminate()

    #retrieve all the key release events since we last checked
    keyUpEvents = pygame.event.get(KEYUP) 

    #if there are no key release events
    if len(keyUpEvents) == 0: 
        #there was no key press, don't return anything
        #and skip the rest of the method
        return None 

    #if the user pressed the escape key
    if keyUpEvents[0].key == K_ESCAPE:
        #quit the game
        terminate()

    #if we haven't returned or quit already
    #return the first key released since we last checked
    return keyUpEvents[0].key

这段代码有一些令人深感不安的事情。

  1. 此方法没有一个明确的目的。它负责退出游戏并返回密钥释放。
  2. 它名称不正确,因为它不是真正检查按下(KEYDOWN)而是发布(KEYUP)。
  3. 如果您足够快地锁定按键,将跳过一些关键事件。只返回第一个事件,但所有事件都从队列中清除。
  4. 如果这是对事件队列进行的唯一检查,最终队列将占用所有可用内存(给定足够的时间和击键)。
  5. 如果我花了一些时间分析它并查看它来自何处,我相信我还能提出一些问题。在您自己的游戏中处理事件时,请将此作为反例。有much better and simpler examples如何进行此类事件检查。