尝试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:如果(且仅当)您碰巧在物理模拟中看到一些奇怪的行为,请查看此答案。