簡體   English   中英

如何在pyglet中使用計划功能將值分配給變量?

[英]How do I assign values to a variable with a schedule function in pyglet?

用下面的代碼

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

而且,如果我還沒有完全離開球場,這會因為實例而記住整個時鍾滴答聲中的值。

通常,這也是您用來進行玩家/游戲/動畫更新的日程安排。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM