我收到错误:
UnboundLocalError:赋值前引用的局部变量'x'
每当我尝试运行游戏时。
我不确定如何解决这个问题并且已经搜索了几个小时。我正在尝试print x
。 X被分配了两次,我开始变得非常沮丧。
任何帮助都表示赞赏,并且解释真的很有帮助,因为我还是python的新手。
# --- Import ---
import sys
import random
import pygame
from pygame.locals import *
pygame.init()
# --- Constants ---
size = width, height = 720, 480
speed = [2, 2]
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Broom! || BETA::00.1.0")
clock = pygame.time.Clock()
car_width = 140
largeText = pygame.font.Font('freesansbold.ttf',115)
smallText = pygame.font.Font("freesansbold.ttf",20)
#I added this in to try combat the issue but the issue persisted
x = 240
##
# --- Pictures ---
road = pygame.image.load(r"1.png")
BackgroundPNG = pygame.image.load(r"BackgroundPNG.png")
carImg = pygame.image.load(r"Sp1.png").convert_alpha()
a = pygame.image.load(r"E1.png")
b = pygame.image.load(r"E2.png")
c = pygame.image.load(r"E3.png")
d = pygame.image.load(r"E4.png")
e = pygame.image.load(r"E5.png")
# --- Colours ---
black = (0,0,0)
blue = (0,0,255)
green = (0,200,0)
red = (200,0,0)
green_bright = (0,255,0)
red_bright = (255,0,0)
# --- functions ---
def text_objects(text, font):
textSurface = font.render(text, True, black)
return textSurface, textSurface.get_rect()
def crash():
message_display("You Crashed")
def message_display():
largeText
text_, text_rect = text_objects(text, largeText)
text_rect.center = ((width/2), (height/2))
screen.blit(text_, text_rect)
pygame.display.update()
time.sleep(2)
game_running()
def game_intro():
text_vroom, text_vroom_rect = text_objects("V'Room!", largeText)
text_vroom_rect.center = ((250),(150))
text_go, text_go_rect = text_objects("GO", smallText)
text_go_rect.center = ((75+(100/2)),(400+(50/2)))
text_exit, text_exit_rect = text_objects("Exit", smallText)
text_exit_rect.center = ((550+(100/2)),(400+(50/2)))
running = True
while running:
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
pygame.quit()
quit()
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
screen.fill(blue)
screen.blit(BackgroundPNG,(0,0))
screen.blit(text_vroom, text_vroom_rect)
# --- Button GO ---
if 175 > mouse[0] > 75 and 450 > mouse[1] > 400:
pygame.draw.rect(screen, green_bright,(75,400,100,50))
if click != None and click[0] == 1:
game_running()
else:
pygame.draw.rect(screen, green,(75,400,100,50))
screen.blit(text_go, text_go_rect)
# --- Button EXIT ---
if 650 > mouse[0] > 550 and 450 > mouse[1] > 400:
pygame.draw.rect(screen, red_bright,(550,400,100,50))
if click != None and click[0] == 1:
pygame.quit()
quit()
else:
pygame.draw.rect(screen, red,(550,400,100,50))
screen.blit(text_exit, text_exit_rect)
pygame.display.flip()
clock.tick(15)
def game_running():
print("gamerunning")
#Create pause here
#Create stop here
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
x = 240
y = 280
x_change = 0
car_speed = 0
movement()
o_y = height
def movement():
crashed = False
while not crashed:
print(x)
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
crashed = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -5
elif event.key == pygame.K_RIGHT:
x_change = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_change = 0
x += x_change
screen.fill(blue)
screen.blit(road, (0,0))
screen.blit(carImg, (x,y))
pygame.display.flip()
if x < -10:
x = -10
else:
if x > 490:
x = 490
else:
fallingObject()
def fallingObject():
o_x = random.randrange(0,width)
o_y = o_y + 20
objectSpawn = True
while objectSpawn:
screen.blit(a, (o_x,o_y))
movement()
objectSpawn = False
clock.tick(30)
game_intro()
答案 0 :(得分:2)
问题可以像这样简化:
>>> def game_running():
x = 240
movement()
>>> def movement():
print(x)
x += x_change
>>> game_running()
Traceback (most recent call last):
print(x)
UnboundLocalError: local variable 'x' referenced before assignment
您在一个函数中定义了一个变量,然后尝试在另一个函数中使用它。请参阅Using global variables in a function other than the one that created them。
另一个解决方案是创建一个类,然后说self.x
。