我正在使用LibGDX和Box2D編寫Android遊戲。我正在計劃增加一個基於回合的多人遊戲功能。Box2D是完全確定性的嗎?
現在,如果在兩個客戶端上,我以相同的時間步長以相同的速率步進Box2D世界,並且我將在兩個客戶端上使用完全相同的初始參數進行模擬,當模擬結束時,最終狀態兩個模擬都完全一樣嗎?換句話說,Box2D仿真是完全確定性的嗎?
如果不是,那麼這意味着每次模擬結束時,一個作爲主機的客戶必須告訴另一個客戶放棄其最終模擬的結果並使用其結果。
我正在使用LibGDX和Box2D編寫Android遊戲。我正在計劃增加一個基於回合的多人遊戲功能。Box2D是完全確定性的嗎?
現在,如果在兩個客戶端上,我以相同的時間步長以相同的速率步進Box2D世界,並且我將在兩個客戶端上使用完全相同的初始參數進行模擬,當模擬結束時,最終狀態兩個模擬都完全一樣嗎?換句話說,Box2D仿真是完全確定性的嗎?
如果不是,那麼這意味着每次模擬結束時,一個作爲主機的客戶必須告訴另一個客戶放棄其最終模擬的結果並使用其結果。
環顧四周,答案是「否」,即使使用相同的時間步驟!這個答案的原因與在許多編譯器和處理器中如何實現浮點數學有關。每個週期加起來的小差異導致顯着不同的模擬。
官方FAQ報價
官方FAQ現在有一個報價,以確定您推斷https://github.com/erincatto/Box2D/wiki/FAQ/933830ba42bce329a6697212050da00c383f1e79:
#Determinism ##是Box2D的確定性?對於相同的輸入和相同的二進制文件,Box2D將重現任何模擬。 Box2D不使用任何隨機數字,也不對隨機事件(例如定時器等)進行任何計算。
但是,人們通常想要更嚴格的決定論。人們經常想知道Box2D是否可以在不同的二進制文件和不同的平臺上產生相同的結果。答案是不。這個答案的原因與在許多編譯器和處理器中如何實現浮點數學有關。如果你是好奇,我建議你閱讀這篇文章:?不Box2D的物理依靠幀率] http://www.yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html
的可能重複(http://stackoverflow.com/questions/23038132/does-box2d-physics-rely-在幀速率) – JeanLuc
@JeanLuc關於該帖子的問題有同樣的擔憂,但從不同幀率的角度來看。答案是「不」。我的問題已經確定將使用固定幀速率。那麼模擬會是確定性的嗎? – AxiomaticNexus