2017-06-19 6 views
0

ich mache spiel, das spiel zeigt über auf dem bildschirm am ende des spiels und wenn player drücken sie ein beliebiges schlüsselspiel ist wieder gestartet. Das Spiel wird über dem Bildschirm angezeigt, aber das Problem ist, dass das Spiel nicht startet, wenn ich irgendeine Taste drücke. Ich vermute Funktion gameOverScreen() nicht aus while-Schleife zurückkehrt, konnte ich nicht verstehen, warumpygame spiel startet nicht auf schlüssel drücken

diese Funktion aufgerufen, wenn das Spiel über diese kontinuierlich bis Spieler drücken läuft eine beliebige Taste:

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) 

Funktion zu überprüfen Taste drücken ist:

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 

Hauptfunktion, die alle Funktionen aufrufen, ist:

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

Was nennt 'gameOverScreen()' und welcher Code kommt unmittelbar danach? – micsthepick

+0

Sobald eine Taste gedrückt wird, sollte 'gameOverScreen' enden, wie kann man sagen, dass der Code nicht ausgeführt wird? – micsthepick

+0

@micsthepick gameOverScreen() -Funktion weiterlaufen, bis eine Rückkehr gekontert wird – Tango

Antwort

1

Ihr Tastendruck-Handler wird zweimal aufgerufen.

checkForKeyPress() 
    if checkForKeyPress(): 

Der erste Aufruf Streifen der Ereigniswarteschlange der kedown Ereignisse so zweites Mal dort aufgerufen wird kein keypress ist, so dass die Schleife nicht beenden kann.

Es gibt zwei Lösungen:

entweder den ersten Anruf entfernen - die erste dieser Zeilen weg:

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

oder: Shop das Ergebnis in einer Variablen und verwenden Sie die Variable in der if Anweisung:

keyPress = checkForKeyPress() 
if keyPress: 
    ... 
Verwandte Themen