【问题标题】:Do global variables become local variables in a Pyglet window.event function全局变量是否成为 Pyglet window.event 函数中的局部变量
【发布时间】:2020-12-07 18:28:24
【问题描述】:

最近在 Pyglet 中制作游戏时,我反复遇到一个问题。游戏基本上是一个换道游戏,你需要换道以防止与追逐者发生碰撞,导致你输掉游戏,并出现结束画面,让你重新开始游戏。

我设置了一个变量loose,它存储了一个布尔数据。 loose 将是 True,如果我们与追逐者发生碰撞,False,如果我们没有。此变量最初设置为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'

我不明白为什么会发生这种情况,有什么办法可以解决这个错误。

注意:代码已简化以保持问题简短。如果我注释掉我引用loose 的实例,代码就可以完美运行。

【问题讨论】:

  • 我不敢相信有人支持这个问题。
  • global llooseglobal loose 不同(“松散”和“失去”也是不同的东西)。
  • @Matthias 哦!抱歉,错字已修复

标签: python python-3.x game-development pyglet


【解决方案1】:

你误解了global statement

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

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

# global loose <--- DELETE

loose = False 

# [...]

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

    # [...]

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

另见Python Global Keyword

【讨论】:

  • 是的,有道理
猜你喜欢
  • 2023-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
相关资源
最近更新 更多