Хорошая 2D-платформа физики [закрыта]
У меня есть базовый контроллер символов, настроенный для 2D-платформы с Box2D, и я начинаю настраивать его, чтобы он чувствовал себя хорошо. Физические двигатели имеют множество регуляторов для настройки, и мне непонятно, что я впервые пишу с помощью механизма физики, какие я должен использовать. Должны ли прыжки применять силу для нескольких клещей? Импульс? Непосредственно установить скорость? Как остановить аватару от стены, не отнимая все свои трения (или я забираю все трения, но только в воздухе)? Должен ли я моделировать персонажа как капсулу? Коробка с закругленными углами? Коробка с двумя колесами? Просто одно большое колесо? Я чувствую, что кто-то должен был сделать это раньше!
В Интернете, по-видимому, очень мало ресурсов, которые не являются «первой физикой ребенка», которые все отрезаны, где я надеюсь, что кто-то уже решил проблемы. Большинство примеров физических движков для платформеров имеют плавающие элементы управления или прыжки в воздухе или легко эксплуатируемое поведение, когда временное проникновение слишком велико и т. Д.
Некоторые примеры того, что я имею в виду:
- Кратковременное нажатие прыжка на короткое расстояние; длинный ответвитель прыгает выше.
- Короткое заноса при остановке или обратном направлении с высокой скоростью.
- Постоянно стоять на склонах (но, возможно, сползает вниз при уклоне).
- Аналоговая скорость при использовании аналогового контроллера.
- Все, что отличает хороших платформеров от плохих платформеров.
- Смею предлагаю, стабильные движущиеся платформы?
Я действительно не ищу «эй, сделай это». Очевидно, что правильная вещь зависит от того, что я хочу в игре. Но я надеюсь, что кто-то где-то воспользовался возможностями и сказал: «Хорошая техника A действительно отличает X хорошо, техника B делает Y хорошо, но это не работает с C» или имеет несколько обработанных примеров за пределами «if (key = = пробел) character.impulse (0, 1) "
5 ответов
Вот подробный справочник по физике Sonic The Hedgehog . Я бы рекомендовал прочитать его, если не на самом деле копировать его части в основном - дословно.
Очень сложно реализовать, скажем, физику «Марио», используя настоящий физический движок.
В прошлый раз, когда я попробовал это, используя Chipmunk, я смоделировал игрока как 2 круга - «круг тела» поверх «круга футов»
«Круг ножек» имел некоторое трение, был невозмутимым и довольно маленьким. «Круг тела» был большим и трением, чтобы избежать прилипания к стенам /крутым склонам.
Объект был ограничен, чтобы не допускать вращения - он просто скользил вокруг
Если «ноги» касаются чего-то или находятся в последних нескольких кадрах (чтобы разрешить падающие склоны), игрок считался на земле (возможно, также имел нормальную нормальную поверхность)
Прошло некоторое время с тех пор, как я посмотрел на код, но поведение было следующим:
Когда на земле:
- Применить «дополнительную гравитацию» (сила вниз, чтобы помочь с запуском склонов)
- Примените трение на землю (большее значение горизонтального затухания)
- Применить силу перемещения влево /вправо на основе элементов управления.
- (Уменьшите силу перемещения влево /вправо, приближаясь к максимальной скорости)
- Если нажать прыжок, примените импульс вверх
Когда в воздухе:
- Примените сопротивление воздуха (небольшое количество горизонтального затухания)
- Применить регулярную (или уменьшенную) гравитацию
- Применить силу перемещения влево /вправо, если вы разрешаете управление в воздухе
Вы должны быть немного осторожны при переключении между двумя состояниями - помните, что при запуске по склону вы можете оставить основание для нескольких кадров - вы, вероятно, не хотите переключаться между состояниями /запрещать прыжки в этот момент
Несколько других вещей, на которые нужно следить, хотя ... «перескакивающие» платформы могут быть трудно реализованы, и когда вы начинаете делать забавные вещи (движущиеся платформы, вращающиеся миры и т. д.), вы должны будьте осторожны, чтобы убедиться, что игрок не может попасть в ловушку /раздавлен любым движущимся объектом с анимацией.
Честно говоря, я не думаю, что использование физического движка - это правильный подход для чего-то такого домена с высокими требованиями.
Просто напишите все сами. Вы получите намного лучшие результаты, сказав «переместить символ х единицами в этой форме параболы, удерживая нажатой кнопку перехода на длину y», чем с помощью пучка регуляторов.
Я написал серию статей о создании игровой платформы с нуля с использованием современных технологий и включает в себя то, как я обрабатывал простую физику:
Этот вопрос видел значительную дискуссию на форумах Box2D. Чтение, хотя обсуждение движения персонажа, прыжка или платформера, и вы столкнетесь со всеми возможными проблемами. Однако проблема стала достаточно сложной, и система фильтрации столкновений была обновлена, и пример тестовой кровати был создан исключительно для того, чтобы показать, как это должно быть сделано.
- Используйте Box2D
- Следуйте тестовому столкновению символов