最近,当我在派格莱特做游戏的时候,我反复地面临一个问题。游戏基本上是一个换道游戏,你需要改变球道,以防止与追逐者发生碰撞,这会导致你放松游戏,最终屏幕会出现,让你重新开始游戏。
我设置了一个变量loose,它存储布尔数据。如果我们没有与追赶者和False发生碰撞,那么loose就是True。这个变量最初被设置为False,但在我的冲突检测算法中(在我的更新函数中),它被设置为True。
global loose
loose = False
...
def update(dt):
...
if collision:
loose = True
...稍后当我使用鼠标事件检测到单击“重新启动”按钮时,
@window.event
def on_mouse_press(x, y, button, modifiers):
global loose
if mouse_clicked:
if loose:
...
loose = False
...在这里,我得到了if loose:行中的错误,
UnboundLocalError:赋值前引用的局部变量“松散”
我不明白为什么会发生这种情况,我能做些什么来纠正错误吗?
注:代码被简化,以保持问题简短。如果我注释掉我引用的loose的实例,代码就会完美地工作。
发布于 2020-12-07 18:31:35
你误解了语句
全局语句是一个包含整个当前代码块的的声明。这意味着所列出的标识符将被解释为全局值。
全局范围内的global loose没有任何意义。您必须将global loose放在函数update中
# global loose <--- DELETE
loose = False
# [...]
def update(dt):
global loose # <--- ADD
# [...]
if collision:
loose = True
# [...]https://stackoverflow.com/questions/65187340
复制相似问题