2014-03-01 18 views
0

我正在設計一個使用HTML5的遊戲,雖然我要問的問題並不依賴於使用的技術。 這裏有一個WIP:http://lajili.com/fierysnake1秒前對象的位置,而不是30個gameloops前

看起來很好,但我有一個主要問題:蛇的垂直速度是您的電腦/智能手機的功率因素。而且我需要精確地控制這個速度,所以蛇在每次轉彎之間可以達到90°,並且與隧道的速度同步。如你所知,當你在遊戲中移動一個遊戲對象時,你使用「delta-time」來修正他的速度,也就是說,從上一個遊戲回合開始的時間。這對頭部來說工作得很好。但第二個身體部位依賴於頭部移動,因爲它是「頭部在X幀前」。但是x幀前的位置取決於x幀前的增量時間。而第三個正文部分依賴於增量時間x * 2幀前等等。 但主要問題是如何計算「x幀前」。你看,根據機器的計算能力,從3秒前開始,可以調用60個gameloops或90個gameloops。我需要一種方法來告訴「位置'1秒前'而不是'30幀前',因爲這可能不正確。但我不知道該怎麼做。

回答

0

你必須跟蹤最後幾秒鐘「頭部」的位置,如果頭部只向左或向右移動,當方向發生變化時,它可以在單個維度上記錄新速度,如下面的JSON數組:

[ 
    { 
     speed: 2.5, 
     time: 5.321 
    }, { 
     speed: -2.5, 
     time: 4.284 
    }, { 
     speed: 2.5, 
     time: 3.252 
    } 
    // ... 
] 

如果你知道當前位置和當前時間,你可以計算「頭部」的所有以前的位置,但如果你還記錄了事情會更容易(並且更精確,因爲你正在處理浮點數)發生方向變化的位置:

[ 
    { 
     speed: 2.5, 
     time:  5.321, 
     position: 1.072 
    }, { 
     speed: -2.5, 
     time:  4.284, 
     position: 11.782 
    }, { 
     speed: 2.5, 
     time:  3.252, 
     position: 3.652 
    } 
    // ... 
] 

有了這些信息,您只需要在過去的片刻找到正確的片段,然後就可以插入位置。您只需要將記錄保留一段時間,並且可以刪除它們,如果它們較舊以避免不斷增長的隊列。

+0

剛剛在一些朋友的幫助下得出了同樣的結論,你是對的,那就是解決方案。你可以在問題的鏈接中看到你的解決方案,它的工作!謝謝。 http://lajili.com/fierysnake –

相關問題