物理主体在浏览器中移动但不在mac或ios上移动

时间:2014-09-21 04:54:37

标签: cocos2d-x chipmunk cocos2d-js

我试图通过在调度程序中更改其坐标来移动物理主体,并且我使用了此代码。如果我在浏览器中运行此代码它将工作但在js绑定后它不能在mac或ios上工作。物理体在这些设备上根本不移动

init: function{
 var mass = 1;    
var width = 1, height = 1;
this.playerBody = new cp.Body(mass , cp.momentForBox(mass, width, height));
this.space.addBody(this.playerBody);

this.schedule(this.move);
},
move: function(dt){
this.space.step(dt);
this.playerBody.getPos().x += 2 * dt;
this.playerBody.getPos().y += 2 * dt;
}

2 个答案:

答案 0 :(得分:1)

尝试从这些行中删除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:如果(并且仅当)您在物理模拟中看到一些奇怪的行为,请查看this answer

答案 1 :(得分:0)

添加几行后,我的播放器开始在mac中移动

init: function{
var mass = 1;    
var width = 1, height = 1;
this.playerBody = new cp.Body(mass , cp.momentForBox(mass, width, height));
this.space.addBody(this.playerBody);

this.schedule(this.move);
},
move: function(dt){
this.space.step(dt);
var a = this.playerBody.local2World(this.playerBody.p);
a.y += 2 * dt;
a.x += 2 * dt ;
a = this.playerBody.world2Local(a);
this.playerBody.p = a;
}

但我没有对此代码的解释