Python pygame游戏未在按键时启动

Python pygame游戏未在按键时启动,python,loops,pygame,Python,Loops,Pygame,我正在制作一个游戏,在游戏结束时在屏幕上显示游戏,如果玩家按下任何键,游戏将重新开始 屏幕上会显示游戏,但问题是当我按任意键时,游戏没有开始。我怀疑gameOverScreen()函数没有返回while循环,我不明白为什么 此函数在游戏结束时调用,并持续运行,直到玩家按下任意键: def gameOverScreen(): textFont = pygame.font.Font('freesansbold.ttf',90) while True: overSurf

我正在制作一个游戏,在游戏结束时在屏幕上显示游戏,如果玩家按下任何键,游戏将重新开始

屏幕上会显示游戏,但问题是当我按任意键时,游戏没有开始。我怀疑gameOverScreen()函数没有返回while循环,我不明白为什么

此函数在游戏结束时调用,并持续运行,直到玩家按下任意键:

def gameOverScreen():
    textFont = pygame.font.Font('freesansbold.ttf',90)
    while True:
        overSurf = textFont.render('GAME OVER',True,RED)
        overRect = overSurf.get_rect()
        overRect.center = (WINDOWWIDTH/2,WINDOWHEIGHT/2)
        DISPLAYSURF.blit(overSurf,overRect)
        drawPressKeyMessage()
        checkForKeyPress()
        if checkForKeyPress():
            pygame.event.get() #clear event queue
            return
        pygame.display.update()
        FPSCLOCK.tick(FPS)
检查按键的功能是:

def checkForKeyPress():
    if len(pygame.event.get(QUIT)) > 0:
        terminate()
    keyUpEvents = pygame.event.get(KEYUP)
    if len(keyUpEvents) == 0:
        return None
    else:
        return keyUpEvents[0].key
调用所有函数的主要函数是:

def main():
    global FPSCLOCK, DISPLAYSURF, BASICFONT

    pygame.init()
    FPSCLOCK = pygame.time.Clock()
    DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
    BASICFONT = pygame.font.Font('freesansbold.ttf', 18)
    pygame.display.set_caption('Wormy')

    showStartScreen()
    while True:
        runGame()
        showGameOverScreen()

您的按键处理程序被调用两次

checkForKeyPress()
    if checkForKeyPress():
第一次调用剥离了kedown事件的事件队列,因此第二次调用时没有按键,因此循环无法终止

有两种解决方案:

或者:删除第一个呼叫-删除以下行中的第一行:

checkForKeyPress() -- delete this line
if checkForKeyPress():
或:将结果存储在变量中,并在if语句中使用该变量:

keyPress = checkForKeyPress()
if keyPress:
    ...

什么调用了
gameOverScreen()
以及紧接着是什么代码?只要按下一个键,
gameOverScreen
就应该完成了,你怎么知道之后代码不会执行?@mics选择gameOverScreen()函数一直运行直到返回被抵消。我现在得到了它,检查是否调用了两次keypress。您应该在第一次调用中将该值存储在变量中,然后在第二个实例中使用该变量。