Python pygame-弹跳球(未绑定LocalError:赋值前引用的局部变量';move#y')

Python pygame-弹跳球(未绑定LocalError:赋值前引用的局部变量';move#y'),python,pygame,Python,Pygame,我想创建一个函数,负责从屏幕边缘反弹球。我知道我可以用math和Vector2函数做得更好,但我想知道为什么我会有这个错误,为什么我可以在没有这行代码的情况下运行window: 如果ball.y>=高度-10: 移动y=-vall水平 代码 班级舞会: 定义初始值(自、x、y、颜色): self.x=x self.y=y self.color=颜色 def绘图(自,窗口): pygame.draw.circle(窗口,self.color,(self.x,self.y),10) 球=球(宽度/

我想创建一个函数,负责从屏幕边缘反弹球。我知道我可以用math和Vector2函数做得更好,但我想知道为什么我会有这个错误,为什么我可以在没有这行代码的情况下运行window:

如果ball.y>=高度-10:
移动y=-vall水平
代码

班级舞会:
定义初始值(自、x、y、颜色):
self.x=x
self.y=y
self.color=颜色
def绘图(自,窗口):
pygame.draw.circle(窗口,self.color,(self.x,self.y),10)
球=球(宽度//2,高度//2,红色)
def main():
运行=真
球位=10
移动x=球水平
移动=球水平
def update():
窗口填充(黑色)
球。抽签(窗口)
播放器。绘制(窗口)
pygame.display.update()
def ball_move():
如果高度-10>ball.y>0,宽度-10>ball.x>0:
ball.x+=移动
ball.y+=移动y
如果ball.y>=高度-10:
移动y=-球水平
运行时:
时钟滴答声(FPS)
球移动()
更新()

该问题是由该功能引起的

导致问题的代码位于以下函数中:

def ball_move():
如果高度-10>ball.y>0,宽度-10>ball.x>0:
ball.x+=移动
ball.y+=移动y
如果ball.y>=高度-10:
移动y=-球水平
在函数中,
ball\u move
写入变量
move\u y
。这意味着变量在函数体中声明,并且是局部变量(在
ball\u move
中为局部变量)。在声明变量之前读取该变量会导致错误

UnboundLocalError:赋值前引用的局部变量“move_y”

如果要将变量解释为全局变量,则必须使用。实际上,函数
main
中存在一个同名变量。但由于同一变量将在
main
中设置,因此也必须在此处声明为全局变量:

def main():
全局跑步、移动x、移动y 0和宽度-10>球。x>0:
ball.x+=移动
ball.y+=移动y
如果ball.y>=高度-10:
移动y=-球水平
运行时:
时钟滴答声(FPS)
球移动()
更新()

必须将
move\u y
声明为全局变量,否则
ball\u move()
函数会认为它是局部变量。我假设这不是整个脚本,因为顶部有一个
if
语句会影响
move\u y
。如果您还没有发布完整的回溯,请发布它描述的行。@JohnGordon变量
move\u x
move\u y
在函数的前几行重新定义;它们可用于
main
中的任何内部函数。我复制并粘贴了错误的代码,但前两行代码仅引用ball_move()函数中的两行。使用全局变量对我帮助很大,谢谢。@OakenDuck它们可以在全局范围内读取,但不能赋值。