按键开始时,pygame游戏无法启动

时间:2017-06-19 11:09:59

标签: python loops pygame

我正在制作一款在游戏结束时在屏幕上显示游戏的游戏,如果玩家按任意键,游戏将再次启动。

屏幕上显示游戏,但问题是当我按任意键时,游戏无法启动。我怀疑函数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()

1 个答案:

答案 0 :(得分:1)

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

checkForKeyPress()
    if checkForKeyPress():

第一个调用剥离了kedown事件的事件队列,因此第二次调用它时没有按键,因此循环无法终止。

有两种解决方案:

要么:删除第一个电话 - 取走第一个电话:

checkForKeyPress() -- delete this line
if checkForKeyPress():

或:将结果存储在变量中,并使用if语句中的变量:

keyPress = checkForKeyPress()
if keyPress:
    ...