Заставить сущность отскочить от другой сущности в ImpactJS

У меня есть объект игрока, который управляется силой тяжести, и у меня есть другой объект в нижней части экрана, который перемещается.

Когда моя падающая сущность игрока падает на сущность внизу, я хочу, чтобы она отскочила от нее.

В идеале я хотел бы использовать свойство.bounciness объекта игрока.

1 ответ

Решение

Вы хотите, чтобы ваша нижняя сущность содержала следующие свойства:

checkAgainst: ig.Entity.TYPE.A, // player entity type
collides: ig.Entity.COLLIDES.ACTIVE

Тогда вы хотите, чтобы ваш check() метод вашего bottomEntity для изменения скорости объекта игрока, когда он сталкивается с ним.

check: function(other) {
  other.vel.y -= 100; // you could also use other.accel.y
}

Также, если вы хотите, вы также можете обрабатывать углы отклонения при столкновениях (аналогично играм Арканоид):

Если игрок попадает в центр, вы хотите, чтобы он шел прямо вверх. Если он попадает в правую половину, вы хотите, чтобы он шел прямо; если он ударяет слева, вы хотите, чтобы он пошел налево.

Так что найдите, где игрок ударяет по нижней сущности, и найдите его угол относительно конца сущности.

var playerPos = player.pos.x - bottomEntity.pos.x;
var relativePos = ( bottomEntity.size.x - playerPos);
var angle = relativePos * ( Math.PI / bottomEntity.size.x ); // translate to radians - this finds the number of radians per bottom entity pixel

Как только вы получили угол, возьмите cos из этого, чтобы захватить направление. Умножьте направление, умноженное на скорость нижних объектов, и вы получите новую скорость для нижних объектов.

var newVel = Math.cos( angle ) * bottomEntity.vel.x;

Тогда ваш check() Метод будет выглядеть так:

check: function(other) {
  var playerPos = other.pos.x - bottomEntity.pos.x;
  var relativePos = ( bottomEntity.size.x - playerPos);
  var angle = relativePos * ( Math.PI / bottomEntity.size.x ); // translate to radians - this finds the number of radians per bottom entity pixel
  other.vel.y -= newVel;
}
Другие вопросы по тегам