2012-02-14 57 views
3

我在均勻移動精靈時遇到了問題;目前我正在使用while循環來移動它們,問題在於計算機速度越快,循環越快,精靈移動的速度越快。我已經嘗試了pygame中的定時器/時鐘函數(等待?),它在等待時凍結了光標,因此使光標跳動。我如何讓精靈在Pygame&Python中的所有電腦上均勻移動

是多線程的答案?

這裏是我的問題的視頻; http://www.youtube.com/watch?v=cFawkUJhf30

+0

+1的視頻! – badp 2012-02-14 12:36:34

回答

10

您取決於幀速率,幀率越快,運動速度越快。

通常,我們正在計算2幀/循環迭代之間的時間,我們稱之爲「增量時間」。然後我們將這個增量時間乘以運動向量。

這裏是一個循環樣品:

clock = pygame.time.Clock() 
while True: 
    # limit the framerate and get the delta time 
    dt = clock.tick(60) 

    # convert the delta to seconds (for easier calculation) 
    speed = 1/float(dt) 

    # do all your stuff, calculate your heroes vector movement 
    # if heroes position is "px, py" and movement is "mx, my" 
    # then multiply with speed 
    px *= mx * speed 
    py *= my * speed 

然後移動跟隨幀率:如果你的循環速度更快,那麼增量更低,然後將移動每幀=>結果越慢無論幀率如何,速度都相同。

你現在獨立於幀率。

+0

作爲一個方面認爲,將'上限'放在'dt'上是明智的,以防發生負載峯值。 – badp 2012-02-14 12:35:10

+0

mx是什麼定義的? – 2012-02-14 12:56:34

+0

沒關係,它現在沒有'px * = mx *速度 py * =我*速度'位 ** Thankyou這麼多** – 2012-02-14 12:59:34

0

我發現一個線程處理這個問題here

嘗試以下操作:

clock = pygame.time.Clock() 
while True: 
    if clock.tock(60): #Limit to 60fps 
     ... #Update game display here 
    else: 
     cursor.update()