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()関数をすでに設定しています...助けてください