0

box2dweb でこの非常に標準的な方法を使用して、マウス クリックでボディを作成します。

*stage.onMouseDown = function(){
     var fixDef = new box2d.b2FixtureDef;
     fixDef.density = 1;
     fixDef.friction = 0.5;
     fixDef.restitution = 0.7;
     var bodyDef = new box2d.b2BodyDef();
     bodyDef.type = box2d.b2Body.b2_dynamicBody;
     bodyDef.position.x = mouseX /scale;
     bodyDef.position.y = mouseY /scale;
     fixDef.shape = new box2d.b2CircleShape(Math.random()*100/scale);
     world.CreateBody(bodyDef).CreateFixture(fixDef);}

作成したボディに名前または ID を挿入する方法が本当にわかりません (最終的にはnum++、すべての作成時に変数を追加できます)。また、IDを介して自分の体を取り戻し、.DestroyBodyメソッドを呼び出して具体的に削除する方法もわかりません。

私は JavaScript と Objective C の初期段階にいるので、Actionscript 用に作成されたメソッドとドキュメントは私を夢中にさせます..

前もって感謝します。

質問の更新:

この方法を使用して、すべてのオブジェクトの中から必要なオブジェクトを見つけて、作成済みのオブジェクトを元に戻す方法を見つけました。

注: myBody はグローバルです

        myBody['enter'+prodNum] = bodyDef;
        bodyDef.userData = prodNum;
        myBody['enter'+prodNum].id = bodyDef.userData;

prodNum は、サイクルごとに「++」を持つグローバル変数です。これにより、ボディの var 名と bodyDef.userData プロパティの両方を使用してボディを呼び戻すことができます。

window.onload を介して実行される init() で呼び出される次の関数を使用すると、console.log が示すように、取得したボディに必要なものを変更できますが、キャンバス内のボディには変更が適用されません。ログのプロパティが変更された結果、画面に変化が見られません。

function reduceObj(){

     var itsMe;

                itsMe = myBody.enter10;

        var newPosX = itsMe.position.x;

        itsMe.active = false;
        itsMe.awake = true;
        itsMe.linearVelocity.x = 2000;
        itsMe.position.x = newPosX+500;
        itsMe.fixedRotation=true;
        itsMe.allowSleep=true;


        console.log(myBody.enter10,itsMe,itsMe.id,'it s me');



 }

なぜこれがすべて起こるのかわかりません..さらに、xミリ秒ごとに世界をリフレッシュするstep()関数をすでに設定しています...助けてください

4

1 に答える 1

0

CreateBody 関数は、後で本体を破棄するために保持できる参照を返す必要があります。

var mybody = CreateBody( bodyDef );
mybody.CreateFixture( fixDef );

ボディにプロパティを設定して変更することはできません。適切な関数を使用する必要があります。

// later...
mybody.SetActive( false );
mybody.SetAwake( true );

var vel = mybody.GetLinearVelocity();
vel.x = 2000;
mybody.SetLinearVelocity( vel );

var pos = mybody.GetPosition();
pos.x += 500;
mybody.SetPosition( pos );

mybody.SetFixedRotation( true );
mybody.SetSleepingAllowed( true );

500 単位は 0.5 km であることを覚えておいてください。寸法にはピクセルではなくメートルを使用してください。2000m/s の速度は約 7200km/h またはマッハ 6 です (参照として、これまでに製造された最速の航空機は約マッハ 8 であるため、これもおそらくあなたが望むものではありません)。他の一般的な落とし穴については、このページをご覧ください: http://www.iforce2d.net/b2dtut/gotchas

于 2014-06-14T21:09:49.413 に答える