У меня есть два тела в мире. Первый - это перемещение игрока. Во-вторых, враг пытается ударить игрока. Я хочу реализовать щит для игрока, поэтому, когда противник касается игрока, он не влияет на линейную скорость игроков, а продолжает двигаться.Box2D: Продолжайте моделировать тело, игнорируя силы от конкретных тел.
Я попытался добавить третье тело в качестве кинематической привязки его к игроку (имея его немного больше, чем игрок), но по какой-то причине он прилипла к стене, когда к игроку прилагается линейный импульс.
Поэтому я попытался остановить остановку на игроке и применить инвертированную линейную скорость игрока к противнику. Это отлично работает, когда мой игрок устойчив, но не двигается.
Как я могу сделать это кинематическим, как тело со всеми функциями динамического движения, но НЕ НАЙДЕНЫ НАРУШЕНИЯМИ врагов.
Это код, который я старался нормально работать, когда игрок устойчив, так как iam обнуляет линейную скорость после удара, но это не совсем чистое решение.
Могу ли я на самом деле иметь кинематические тела и использовать applyLinearImpulse на них? Проблема, которую я вижу в кинематических телах, - это мой игрок, который просто игнорирует стены, но он все равно должен сталкиваться со стенами и чем-то еще в мире. ИСКЛЮЧАЕТ врагов, которые должны отскакивать от игрока, как будто они ударяются о стену.
func postSolve(contact: b2Contact, impulse: b2ContactImpulse) {
...
if player.ShieldActive {
let playervelocity = player.getLinearVelocity()
player.forceStop // sets linearvelocity to zero including angularvelocity
enemy.applyLinearImpulse(playervelocity.invert()*0.1) // apply the inverted velocity of the player with a scalar so the enemy moves aways like it hit a wall
}
...
}