Я разрабатываю 2D-подводную ролевую игру для Android, используя Box2D в качестве физического движка, в основном для обнаружения столкновений, реагирования на столкновения и движения игровых персонажей в среде, состоящей из стен, камней и других существ.
Я пробовал два разных подхода к реализации анимации персонажей с помощью Box2D и обнаружил проблемы с обоими. Поскольку я новичок в Box2D и физических движках, я был бы признателен за рекомендацию, как это лучше всего делать.
Пример анимации, которую я пытаюсь сделать, выглядит следующим образом:
Рыба хочет атаковать другую рыбу, поэтому делает следующее:
1) Двигайтесь к цели со скоростью
2) Откусите целевое существо
3) Повернитесь и бегите обратно туда, где началась атака.
4) Повернитесь лицом к цели, готовясь к новой атаке.
Я пробовал два подхода:
A) Примените силу к атакующему (с помощью body.applyForce ()), чтобы переместить его к цели, затем еще одну силу, чтобы вернуть его обратно после столкновения < br> Проблемы:
* Часто атакующий попадает в цель, отскакивает и на огромной скорости улетает назад и отскакивает от стен повсюду. Скорость довольно случайна, в зависимости от того, где она поражает цель, массы цели и т. Д. Она нарушает анимацию и выглядит ужасно.
* Очень сложно понять, какие силы следует применить к атакующему и когда , чтобы смоделировать конкретную анимацию в физическом мире, чтобы она выглядела реалистично.
B) Непосредственно установите позицию нападающего (с помощью body.setTransform ()), чтобы переместить нападающего в правильную позицию, когда он продвигается вперед на каждом шаге, а затем возвращается назад. снова.
Проблемы:
* Прямая установка позиции позволяет атакующему игнорировать столкновения со стенами и другими существами, поэтому застревание в стене является обычным явлением
* Если игрок нападая, я обновляю мировое происхождение по мере движения игрока, чтобы он оставался посередине экрана. Это работает хорошо, за исключением случаев, когда я запускаю анимацию, поскольку я не хочу, чтобы экран следовал за анимацией, а только компонент движения существующей скорости, о которой я не знаю, поскольку я переопределяю силы Box2D / скорости, когда я устанавливаю позицию. Я уверен, что это возможно, но сложно - может, я упускаю что-то очевидное.
Следует ли мне следить за столкновениями? Отмена реакции на столкновение ?? Что-то другое?
Итак, как вы порекомендуете мне подойти к этой проблеме?