用下面的代码
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个遍。 我想对于价值与每个呼叫进行更新。 我在想什么?
这里的设计是基于你的函数依赖于返回结果。
这会导致一个问题,因为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()
如果我不能完全出球公园,这会记得跨时钟滴答,因为实例的,值。
这也是通常你将要使用的时间表,做播放器/游戏/动画更新的东西。