我正在制作一款在游戏结束时在屏幕上显示游戏的游戏,如果玩家按任意键,游戏将再次启动。
屏幕上显示游戏,但问题是当我按任意键时,游戏无法启动。我怀疑函数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()
答案 0 :(得分:1)
你的按键处理程序被调用两次。
checkForKeyPress()
if checkForKeyPress():
第一个调用剥离了kedown事件的事件队列,因此第二次调用它时没有按键,因此循环无法终止。
有两种解决方案:
要么:删除第一个电话 - 取走第一个电话:
checkForKeyPress() -- delete this line
if checkForKeyPress():
或:将结果存储在变量中,并使用if语句中的变量:
keyPress = checkForKeyPress()
if keyPress:
...