这段代码中发生了什么?

2024-04-23 20:30:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在努力学习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

Tags: keyeventgetlenreturnifdef语法
1条回答
网友
1楼 · 发布于 2024-04-23 20:30:54

我想我已经过度回答了你的问题。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. 如果这是对事件队列进行的唯一检查,那么队列最终将占用所有可用内存(给定足够的时间和击键)。你知道吗

我相信如果我花更多的时间来分析它,看看它是从哪里来的,我会想出更多的问题。请在处理自己游戏中的事件时使用此作为反例。这里有much better and simpler examples关于如何进行此类事件检查。你知道吗

相关问题 更多 >