2016-05-22 7 views
0

Ich versuche, ein Spiel in Python mit Pygame zu machen. Mein Code scheint richtig, aber ich bekomme den folgenden Fehler.Wie zu beheben UnboundLocalError in Pygame

> Traceback (most recent call last): 
    File "C:\Users\500198\Desktop\Dodge It.py", line 195, in <module> 
    gameLoop() 
    File "C:\Users\500198\Desktop\Dodge It.py", line 190, in gameLoop 
    runGame() 
    File "C:\Users\500198\Desktop\Dodge It.py", line 182, in runGame  
    x += x_change 
UnboundLocalError: local variable 'x' referenced before assignment 

Was ich versuche, die food image.But aus irgendeinem Grund zu tun ist, bewegen sich die Variable wird nicht ändern ‚x‘ und gibt mir den obigen Fehler.

Lade Bild

carimg=pygame.image.load('food.png') 
x=(display_width*0.45)  
y=(display_height*0.48) 
x_change =0 

Auto Bild

Hier ist meine Funktion das Auto auf dem Bildschirm zum Zeichnen:

def car(x,y): 
    gameDisplay.blit(carimg,(x,y)) 

Das ist mein Spiel laufen up ist

def runGame(): 
     gameExit = False 
     gameOver = False 
     while not gameExit: 
      while gameOver == True: 
       #Game Over message 

       gameDisplay.fill(white) 
       message_to_screen("Game over", 
            red, 
            y_displace=-50, 
            size="large") 
       message_to_screen("Press C to play again or Q to quit.", 
            white, 
            y_displace=50, 
            size="medium") 
       pygame.display.update() 

       for event in pygame.event.get(): 
        if event.type == pygame.KEYDOWN: 
         if event.key == pygame.K_q: 
          gameExit = True 
          gameOver = False 
         if event.key == pygame.K_c: 
          gameLoop() 
      #Game Controls 
      for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
        gameExit = True 
       if event.type == pygame.KEYDOWN: 
        if event.key == pygame.K_LEFT: 
         x_change = -5 #Change is x co ordinate by -5 
        elif event.key == pygame.K_RIGHT: 
         x_change = 5 #Change is x co ordinate by +5 

       if event.type == pygame.KEYUP: 
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
         x_change=0 #Player should not move up or down 

      x += x_change #X change since i need to move the image 
      gameDisplay.fill(white) 
      car(x,y) 
      pygame.display.update() 
      clock.tick(FPS) 

Mein Spiel Loop

def gameLoop(): 
    runGame() 
    pygame.quit() 
    quit() 

Loop Anruf

gameLoop()

+0

Ich schreibe diesen Code in Python 2.7.Ist das wegen falscher Syntax und Verwirrung habe ich zwischen Python 2.7 und Python 3. –

Antwort

0

Sie müssen definieren, x und y als global zu Beginn und in jeder Funktion, die sie verwendet.

global x, y, x_change 
carimg=pygame.image.load('food.png') 
x=(display_width*0.45)  
y=(display_height*0.48) 
x_change =0 

Und in der Spieleschleife. Wenn sie an die Auto-Zeichenfunktion übergeben werden, sollte es dort okay sein.

global x,y, x_change