我的朋友,我將是任何回答,提前感謝非常gratefull,這是我的問題:使用更新方法Pyglet
在pyglet這是基本的代碼更新精靈在屏幕上:
sprite.x=50
pixels=10
def update(dt):
if move_right == True:
sprite.x += pixels * dt
pyglet.clock.schedule_interval(update, 1/60.0)
這導致子畫面以每秒10個像素speeed從點x移動到右側,如果按下向右鍵。
但讓我們假設我需要從點X1到點X2完全在變量和STOP恰好在點X2,我該怎麼做?
想象一下:
x_start = 20
x_finish = 40
我想從x = 20到x = 40,和停止在x = 40移動。每秒像素數可以是任何值,假設在這個例子中有10個像素。
如果我使用了常用的代碼,我可以這樣做:
sprite.x=20
pixels=10
def update(dt):
if sprite.x != 40:
if move_right == True:
sprite.x += pixels * dt
pyglet.clock.schedule_interval(update, 1/60.0)
這是行不通的,因爲像素×dt的不等於,DT是不規則和浮子(1 /60=0.01,0.01 * 10 = 0.1,dt也是不規則的,所以有時候是0.01,其他的是0.019,其他的是0.021 ...等等),所以每次更新執行sprite.x evolution都是類似的這 - > 10,10,1,10,24,10,38,10.51 ...等
所以,如果sprite.x!= 40:將永遠不會工作(因爲sprite.x將永遠是一個浮動幾乎將是40),我的球員永遠不會停止。
我知道這個問題我有一個非常簡單的解決方案,但我沒有線索,我絕望了。我在pyglet上開始了我的旅程,所以我在這個階段非常無知,需要幫助才能找到解決方案,我找不到出路。
是否有不使用sprite.x + =像素的其它技術來更新子畫面的每一幀* dt的?還有其他解決方案嗎?
非常非常gratefull, 最佳葡萄牙
效果很不錯!我對答案的簡單性感到驚訝,我嘗試了很多複雜的函數,並且用這樣一個乾淨的代碼解決了我的問題。我開始用python的方式,所以我缺乏很多知識,我不知道min()函數,現在我正在研究它。我需要學習更多。非常感謝朋友,非常感謝! :-) – 2011-05-15 11:52:22