2

ここから 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 性をテストすることは明らかに可能ですが、その方法に関するドキュメントは見つかりません。

4

2 に答える 2

0

受け入れられた答えはうまくいきませんでしたが、これはうまくいきました:

var next = World.m_bodyList;
var current;
while (next != null) {
    current = next; next = next.m_next;
    if(current.m_userData){
        var current_body = {};
        current_body.x = current.m_xf.position.x;
        current_body.y = current.m_xf.position.y
    }
}
于 2016-05-08T20:07:58.950 に答える