使用以下代码
x=1.0
def update(dt):
space.step(dt)
def xprinter(self, x):
print (x)
return x+1
if __name__ == "__main__":
x=pyglet.clock.schedule(xprinter,x)
pyglet.clock.schedule_interval(update, 1.0/60)
pyglet.app.run()
我的回报只是1.0遍。我希望每次调用都更新该值。我想念什么?
答案 0 :(得分:1)
此处的设计基于您的函数依赖于返回结果。
这引起了一个问题,因为Pyglet的内部函数负责按一定间隔执行该函数,这意味着您不是执行该调用的那个人-而且那里的Pyglet也不是获得该返回值的人。
并且由于Pyglet没有有意义的方法来中继返回的值(有很多方法,但是它们涉及到挂钩和覆盖某些内部函数),所以您将永远看不到该返回值。
>快速简便的解决方法是:
x=1.0
def update(dt):
space.step(dt)
def xprinter(self):
global x
print(x)
x += 1
if __name__ == "__main__":
pyglet.clock.schedule(xprinter)
pyglet.clock.schedule_interval(update, 1.0/60)
pyglet.app.run()
通过这种方式,计划调用将更新全局变量x
,而不是返回数学方程式的结果。
一种更简洁的方法是使用x
属性定义一个类,并将一个类实例传递给pyglet.clock.schedule()
:
class player():
def __init__(self):
self.x = 0
def update(dt):
space.step(dt)
def xprinter(self, p):
print(p)
p.x += 1
if __name__ == "__main__":
p = player()
x = pyglet.clock.schedule(xprinter, p)
pyglet.clock.schedule_interval(update, 1.0/60)
pyglet.app.run()
如果我还没有完全脱离球场,这会因为实例而记住时钟滴答声中的值。
通常这也是您使用时间表进行玩家/游戏/动画更新的方式。