2014-09-21 7 views
0

Я пытался переместить физический объект, изменив его координаты в планировщике, и я использовал этот код. если я запустил этот код в браузере, он будет работать, но после привязки js он не будет работать на Mac или ios. Физика тело не движется вообще на этих устройствахФизическое тело движется в браузере, но не на 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; 
} 

ответ

0

после добавления несколько строк моего игрок начал двигаться в макинтоше

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; 
} 

, но я не объяснение этого кода

+0

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

+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.

+0

первых, я попытался «this.playerBody.x», но это не работает, потому что в классе Body нет такого свойства. Более того, я знаю все эти вещи, которые вы сказали, я просто хочу знать, почему я не могу изменить координаты физического тела в Mac, но я могу без проблем изменить их в браузере. –

+0

К сожалению, у меня была опечатка. Это 'this.playerBody.p.x'. –

+0

Я тоже пробовал это, но он не работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^