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