0

次のコードにセンサー フィクスチャを追加すると、2 つの問題が発生します。再配置ベクトルb2Vec2(0,50)が機能していません。2 番目のフィクスチャは、まだボディの原点の中心にあります。両方のフィクスチャをデバッグ モードで表示できますが、センサー フィクスチャをメイン フィクスチャの足元に移動できません。

次に、イベントを受信して​​いないのはいつisSensorですか。に設定すると、適切なイベントが発生します (衝突と共に)。これを他の物体と衝突しないがイベントを発生させるセンサーにするにはどうすればよいですか。ご協力ありがとうございました。truePostSolvefalse

    // FIXTURE DEF
    var fixDef = new box2d.b2FixtureDef();
    fixDef.shape = new box2d.b2PolygonShape;
    fixDef.shape.SetAsBox((25 / 2 / SCALE), (46 / 2 / SCALE));
    fixDef.density = 0.99;
    fixDef.friction = 0.39;
    fixDef.restitution = 0.0;
    fixDef.userData = "SBody";
    fixDef.filter.categoryBits = CAT.SOLDIER;
    fixDef.filter.maskBits = CAT.GROUND;
    this.view.body.CreateFixture(fixDef);


    // ADD FOOT SENSOR
    fixDef.density = 0.1;
    fixDef.friction = 1.;
    fixDef.restitution = 0.1;
    fixDef.userData = "Foot";
    fixDef.shape.SetAsBox((10 / 2 / SCALE), (100 / 2 / SCALE), new box2d.b2Vec2(0,50), 0);
    fixDef.isSensor = true;
    fixDef.filter.categoryBits = CAT.SOLDIER_FOOT_SENSOR;
    fixDef.filter.maskBits = CAT.SHIP | CAT.GROUND;
    this.view.body.CreateFixture(fixDef);
4

1 に答える 1

1

この回答https://stackoverflow.com/a/4707127/1172891で、3 番目のパラメーターとしてポジショニングを追加するというヒントを使用していましたが、最近SetAsBox、3 番目の引数を取ることができないことがわかりました。代わりにSetAsOrientedBox、同様の方法が見つかり、位置決めのために 3 番目のパラメーターを受け入れます。Box2dFlash リファレンスhttp://www.box2dflash.org/docs/2.1a/reference/Box2D/Collision/Shapes/b2PolygonShape.htmlにあります。

センサーのコールバックについては、最初は を試しただけでしたPostSolve。私は最近、他のイベントのようなものを試してみることを考えEndContact、それがうまくいったことを発見しました. 次に、センサーのみBeginContactがイベントを発生させることを明示的に述べている唯一の場所と思われるこのページを見つけましたEndContact: http://www.box2dflash.org/docs/2.1a/updatingEventsセクション。

誰かの時間を節約できることを願っています!

于 2013-06-18T10:27:30.143 に答える