首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局变量是否成为Pyglet window.event函数中的局部变量?

全局变量是否成为Pyglet window.event函数中的局部变量?
EN

Stack Overflow用户
提问于 2020-12-07 18:28:24
回答 1查看 129关注 0票数 1

最近,当我在派格莱特做游戏的时候,我反复地面临一个问题。游戏基本上是一个换道游戏,你需要改变球道,以防止与追逐者发生碰撞,这会导致你放松游戏,最终屏幕会出现,让你重新开始游戏。

我设置了一个变量loose,它存储布尔数据。如果我们没有与追赶者和False发生碰撞,那么loose就是True。这个变量最初被设置为False,但在我的冲突检测算法中(在我的更新函数中),它被设置为True

代码语言:javascript
复制
global loose
loose = False 
...
def update(dt):
    ...
    if collision:
        loose = True
    ...

稍后当我使用鼠标事件检测到单击“重新启动”按钮时,

代码语言:javascript
复制
@window.event
def on_mouse_press(x, y, button, modifiers):
    global loose
    if mouse_clicked:
        if loose:
           ...
           loose = False
           ...

在这里,我得到了if loose:行中的错误,

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

我不明白为什么会发生这种情况,我能做些什么来纠正错误吗?

注:代码被简化,以保持问题简短。如果我注释掉我引用的loose的实例,代码就会完美地工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-07 18:31:35

你误解了语句

全局语句是一个包含整个当前代码块的的声明。这意味着所列出的标识符将被解释为全局值。

全局范围内的global loose没有任何意义。您必须将global loose放在函数update

代码语言:javascript
复制
# global loose <--- DELETE

loose = False 

# [...]

def update(dt):
    global loose # <--- ADD

    # [...]

    if collision:
        loose = True
    
    # [...]

另见Python全局关键字

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65187340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档