2016-09-19 2 views
0

У меня есть два тела в мире. Первый - это перемещение игрока. Во-вторых, враг пытается ударить игрока. Я хочу реализовать щит для игрока, поэтому, когда противник касается игрока, он не влияет на линейную скорость игроков, а продолжает двигаться.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 
    } 
    ... 
} 

ответ

0

Добавление отдельного тела как кинематические размеров плеера и установив правильную категорию и maskbits сделал это возможным. Я смог свободно передвигаться, и враги больше не могли навредить моему игроку, пока щит был активным.

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