Как мне присвоить значения переменной с помощью функции расписания в pyglet? - PullRequest
0 голосов
/ 22 октября 2018

Со следующим кодом

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 снова и снова.Я хотел бы, чтобы значение обновлялось при каждом вызове.Чего мне не хватает?

1 Ответ

0 голосов
/ 25 октября 2018

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

И если я не совсем вне парка, это запомнит значение через такты, потому чтоНапример:

Обычно это то, для чего вы будете использовать расписание, для обновления игрока / игры / анимации.

...