getPos()
これらの行からそれを削除してみてくださいthis.playerBody.p.x += 2 * dt;
。それがあなたの問題の原因である可能性が最も高いと思います。
さらに、自分で座標を操作することは避け、物理エンジンにすべてを処理させてください。
たとえば、次のようにベロシティを手動で割り当てることができます。
init: function{
var mass = 1;
var width = 1, height = 1;
var vx = 1, vy = 1;
this.playerBody = new cp.Body(mass , cp.momentForBox(mass, width, height));
this.space.addBody(this.playerBody);
this.playerBody.vx = vx;
this.playerBody.vy = vy;
this.schedule(this.move);
},
move: function(dt){
this.space.step(dt);
}
または、特定の方向にオブジェクトに「バンプ」を与えたい場合は、次のapplyImpulse
ように使用できます。
init: function{
var mass = 1;
var width = 1, height = 1;
var fx = 1, fy = 1;
this.playerBody = new cp.Body(mass , cp.momentForBox(mass, width, height));
this.space.addBody(this.playerBody);
this.playerBody.applyImpuse(cp.v(fx, fy), cp.v(0,0));
this.schedule(this.move);
},
move: function(dt){
this.space.step(dt);
}
または、オブジェクトに一定の力を加えたい場合は、最後の例のに変更applyImpulse
します。applyForce
注: このcp.v(0,0)
パラメータは、オブジェクトの中心に力を適用するようにエンジンに指示しているため、オブジェクトは回転しないはずです。
PS: 物理シミュレーションで奇妙な動作が見られた場合 (その場合にのみ)、この回答を見てください。