[英]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.