Заставить сущность отскочить от другой сущности в 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;
}