如何在pygame中修复UnboundLocalError

时间:2016-05-22 06:57:46

标签: python-2.7 pygame

我正在尝试使用pygame在python中制作游戏。我的代码似乎正确,但我得到以下错误。

> 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 

我要做的是移动food图片。但由于某种原因,变量'x'不会改变并且给我上述错误。

加载图片

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

汽车图片

这是我在屏幕上绘制汽车的功能:

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

这是我的游戏

 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)

我的游戏循环

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

循环调用

gameLoop()

1 个答案:

答案 0 :(得分:0)

您需要在开始时以及在使用它们的任何函数中将x和y定义为全局。

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

在rungame循环中。当它们被传递到汽车绘图功能时,它应该没问题。

global x,y, x_change