gpt4 book ai didi

Python pygame - 弹跳球(UnboundLocalError : local variable 'move_y' referenced before assignment)

转载 作者:行者123 更新时间:2023-12-04 08:28:16 25 4
gpt4 key购买 nike

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

if ball.y >= HEIGHT - 10:
move_y = -vall_vel
代码
class Ball:
def __init__(self, x, y, color):
self.x = x
self.y = y
self.color = color

def draw(self, window):
pygame.draw.circle(window, self.color, (self.x, self.y), 10)

ball = Ball(WIDTH // 2, HEIGHT // 2, red)

def main():
run = True

ball_vel = 10
move_x = ball_vel
move_y = ball_vel

def update():
WINDOW.fill(black)

ball.draw(WINDOW)

player.draw(WINDOW)
pygame.display.update()

def ball_move():

if HEIGHT - 10 > ball.y > 0 and WIDTH - 10 > ball.x > 0:
ball.x += move_x
ball.y += move_y

if ball.y >= HEIGHT - 10:
move_y = -ball_vel

while run:
clock.tick(FPS)

ball_move()

update()

最佳答案

问题是由函数引起的
导致问题的代码在一个函数中:

def ball_move():

if HEIGHT - 10 > ball.y > 0 and WIDTH - 10 > ball.x > 0:
ball.x += move_x
ball.y += move_y

if ball.y >= HEIGHT - 10:
move_y = -ball_vel

在函数中 ball_move写入变量 move_y .这意味着该变量在函数体内声明并且是一个局部变量(在 ball_move 中是局部的)。在声明之前读取变量会导致错误

UnboundLocalError: local variable 'move_y' referenced before assignment


您必须使用 global statement如果您想将变量解释为全局变量。实际上在函数 main中存在一个同名的变量.但是由于要在 main 中设置相同的变量,它还必须在那里声明为全局:
def main():
global run, move_x, move_y # <---- ADD

run = True
ball_vel = 10
move_x = ball_vel
move_y = ball_vel

def update():
WINDOW.fill(black)
ball.draw(WINDOW)
player.draw(WINDOW)
pygame.display.update()

def ball_move():
global move_x, move_y # <---- ADD

if HEIGHT - 10 > ball.y > 0 and WIDTH - 10 > ball.x > 0:
ball.x += move_x
ball.y += move_y
if ball.y >= HEIGHT - 10:
move_y = -ball_vel

while run:
clock.tick(FPS)
ball_move()
update()

关于Python pygame - 弹跳球(UnboundLocalError : local variable 'move_y' referenced before assignment),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65153237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com