2016-08-25 4 views
1

私はBox2Dをサーバーと通信するゲームに使用しており、完全な決定論が必要です。私は単純にこれを達成するために整数の数学/固定小数点数学を使いたいと思っていましたが、私はBox2Dでそれを可能にする方法があるのだろうかと思っていました。ありがとうございました!Box2Dで固定小数点計算を有効にする方法はありますか?

+0

問題が解決する場合は、回答を受け入れることを検討してください。ありがとう! –

答えて

0

物理エンジンで確定性を達成する唯一の方法は、物理エンジンで固定時間ステップ更新を使用することです。このリンクで詳細を読むことができます。 http://saltares.com/blog/games/fixing-your-timestep-in-libgdx-and-box2d/

+0

私は確定的な時間ステップを全体的に使用します。しかし、異なるデバイス間で浮動小数点の決定論の問題があるため、十分ではないかもしれません(異なるコンパイラは浮動小数点数を別々に扱うなど)。 – TheMAAAN

1

はい。固定小数点実装であり、Box2Dライブラリコードを変更しています。

Box2D 2.3.2のC++ライブラリコードは、実数のような値の実装にfloat32型を使用します。 float32typedef(C++ floatタイプに)b2Settings.hで定義されているため、実数のような値の異なる基本実装を使用するために1行で変更できます。

残念ながら、float32floatであると定義されていない場合、コードの一部(b2Maxなど)が使用されたり、途切れて書き込まれたりします。そうすれば、それらのエラーは追い詰められなければならず、新しいタイプが使用できるようにエラーコードが書き換えられます。

私は自分自身の固定小数点実装を作成することを含め、この種の作業を自分で行っています。これは、少なくとも、値の小数部分に14〜24ビットの64ビット実装を使用することをお勧めします(使用不能な量のアンダーフロー/オーバーフローの問題がない限り、ほとんどのテストベッドテストで使用できます)。 my forkを見て、私がこれをどうやって行ったのか見てみましょう。しかし、現在はリリース準備が整ったコードではありません(2011年2月11日現在ではありません)。

関連する問題