这里的设计基于您的函数依赖于返回结果。
这导致了一个问题,因为 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()
如果我没有完全脱离球场,这会记住跨时钟滴答的值,因为实例。
这通常也是您将使用时间表的目的,进行播放器/游戏/动画更新。