Попробуйте удалить, что 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.
ОК .. Это определенно странно. Это может быть из-за какой-то проблемы с защитой доступа. Не могли бы вы подать отчет об ошибке на официальном сайте, где описывается весь этот процесс? –
ОК, я обязательно сделаю это –