如何赋值在pyglet日程安排功能的变量?(How do I assign values to a

2019-10-29 09:02发布

用下面的代码

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个遍。 我想对于价值与每个呼叫进行更新。 我在想什么?

Answer 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()

如果我不能完全出球公园,这会记得跨时钟滴答,因为实例的,值。

这也是通常你将要使用的时间表,做播放器/游戏/动画更新的东西。



文章来源: How do I assign values to a variable with a schedule function in pyglet?