1
有沒有完全複製的Javascript物理學2D引擎,這樣既可以節省模擬的狀態爲一個字節數組,例如,在另一臺機器上加載它(相同的架構),因此這兩個模擬會做同樣的下一步?完全複製的Javascript物理學2D引擎爲網絡對戰
我已經聽說了,Box2D的有一些(緩存?),我們不能隨機構/軍隊/關節等
有沒有完全複製的Javascript物理學2D引擎,這樣既可以節省模擬的狀態爲一個字節數組,例如,在另一臺機器上加載它(相同的架構),因此這兩個模擬會做同樣的下一步?完全複製的Javascript物理學2D引擎爲網絡對戰
我已經聽說了,Box2D的有一些(緩存?),我們不能隨機構/軍隊/關節等
從我的經驗數據存儲,物理引擎狀態的完全複製是困難並且不必要。
對於實時多人遊戲中,你通常運行本地物理模擬和改正的,如果狀態(位置,旋轉,速度)從服務器狀態相差太多。虛幻引擎使用這種方法,閱讀更多https://docs.unrealengine.com/udk/Three/NetworkingOverview.html#Physics
遊戲只需要物理場景的初始狀態來執行動畫(如基於回合的遊戲),不需要完整的物理引擎狀態。物理引擎是deterministic,如果你在一個確定的方式使用它們。重新上場物理學動畫上兩個客戶以同樣的方式,請記住:
b2World
開始模擬前,要擺脫在b2World
任何內部狀態。作爲一個例子,下面的函數將每次返回相同的結果在所有客戶端,如果他們都得到同樣的InitialPhysicsState
:
float deterministicFunction(InitialPhysicsState state){
b2World* world = createWorld(state);
b2Body* body = world->GetBodyList();
for(int i=0; i<100; i++){
if(i==50){
body->ApplyForce(b2Vec2(10.0f, 2.0f));
}
world->Step(0.01f, 8, 3);
}
return body->GetPosition().y;
}
謝謝回答。已經用p2.js引擎做了。 – ElSajko