Конструкция здесь основана на том, что ваша функция полагается на возвращение результата.
Что вызывает проблему, потому что внутренние функции 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()
И если я не совсем вне парка, это запомнит значение через такты, потому чтоНапример:
Обычно это то, для чего вы будете использовать расписание, для обновления игрока / игры / анимации.