ここから Box2D の emscripten ポートを使用しています: https://github.com/kripken/box2d.js
うまく機能していますが、emscripten とのやり取りに問題があります。
具体的には、次のようなループでモデルと表示の同期を実行しています。
function step() {
world.Step(1/60);
var body = this.world.GetBodyList();
while(body != null) {
readGeometry(body, body.data);
body = body.GetNext();
}
}
...しかし、それはうまくいかないようです。C++ コードは body オブジェクトのリンクされたリストの最後で NULL を返しますが、body.GetNext() (cpp の戻り値の型は b2Body *) がネイティブ JavaScript の null になることはありません。
私も試しました:
body != Box2D.NULL
しかし、それも決して真実ではありません。私は、emscripten がラップされたポインターを返していると推測しています。「nullness」をテストするには、特定の操作を行う必要があります。
返されたオブジェクトを調べると、null 値の「ポインター」値がゼロであることがわかり、次のように動作させることができます。
function step() {
world.Step(1/60);
var body = this.world.GetBodyList();
while(body.a != 0) { // <--------------- This hack
readGeometry(body, body.data);
body = body.GetNext();
}
}
したがって、NULL 性をテストすることは明らかに可能ですが、その方法に関するドキュメントは見つかりません。