У меня есть базовый контроллер персонажей, настроенный для 2D-платформера с Box2D, и я начинаю настраивать его, чтобы он чувствовал себя хорошо. У физических движков есть множество настроек, и мне не ясно, пишу ли я с физическим движком впервые, какие из них мне следует использовать. Должны ли прыжки применять силу для нескольких тиков? Импульс? Напрямую установить скорость? Как я могу остановить прилипание аватара к стенам, не убирая все его трение (или я убираю все трение, но только в воздухе)? Должен ли я моделировать персонажа как капсулу? Коробка с закругленными углами? Коробка с двумя колесами? Просто одно большое колесо? Я чувствую, что кто-то должен был сделать это раньше!
Похоже, в Интернете очень мало доступных ресурсов, которые не являются «первой физикой ребенка», и все они отрезаны там, где, я надеюсь, кто-то уже решил проблемы. Большинство примеров физических движков для платформеров имеют элементы управления с плавающим чувством, или прыжки в воздухе, или легко эксплуатируемое поведение, когда временное проникновение слишком велико, и т. Д.
Некоторые примеры того, что я имею в виду:
- Короткое нажатие прыжка прыгает на короткое расстояние; длинный кран прыгает выше.
- Короткое занос при остановке или изменении направления движения на высокой скорости.
- Устойчиво стоит на склонах (но, возможно, скатывается по ним при наклоне).
- Аналоговая скорость при использовании аналогового контроллера.
- Все остальное, что отличает хороших платформеров от плохих.
- Смею ли я предложить, стабильные движущиеся платформы?
Я действительно не ищу "эй, сделай это". Очевидно, что правильная вещь зависит от того, что я хочу в игре. Но я надеюсь, что кто-то где-то рассмотрел возможности и сказал: «Хорошо, метод A хорошо работает с X, метод B хорошо работает с Y, но это не работает с C», или имеет несколько рабочих примеров за пределами «if (key = = пробел) character.impulse (0, 1) "
Честно говоря, я не думаю, что использование физического движка является правильным подходом для чего-то такого же размера с супер-строгими требованиями.
Просто напиши все это сам. Вы получите гораздо лучшие результаты, сказав «двигайте персонажа вверх на x единиц в этой форме параболы, удерживая кнопку прыжка на длину у», чем при помощи нескольких ручек для настройки.
источник
Я написал серию статей о создании игровой платформы с нуля с использованием современных технологий, и она включает в себя то, как я справлялся с простой физикой:
http://www.wildbunny.co.uk/blog/2011/12/14/how-to-make-a-2d-platform-game-part-2-collision-detection/
Однако, если вы хотите что-то более высокотехнологичное, вполне возможно подойти к этому, используя полный физический движок. Вот техника, которую вы можете использовать (из Little Big Planet), которая делает персонажа игрока полностью интегрированной частью физического движка:
Вместо применения импульсов или установки скоростей для перемещения игрока в качестве «внешних входов» для физического движка, вы можете разработать ограничение, управляющее персонажем.
Таким образом, это ограничение будет иметь желаемую скорость и направление игрока в качестве входных данных (из игры) и будет моделировать такие вещи, как максимальная сила и скорость игрока. Ограничение будет пытаться перемещать игрока в соответствии с его входными данными (и подчиняться максимумам), и, поскольку оно является ограничением, оно будет применять равную и противоположную силу к объекту, на котором находится игрок, что позволяет игроку стоять на движущихся платформах. и влиять на вещи, которые он перемещает.
Подобные действия означают, что игрок может совершенно естественно иметь дело с такими ситуациями, как нахождение под огромной кучей ящиков или прыжки через несколько движущихся платформ, потому что он теперь является основной частью физического движка.
Надеюсь, это поможет!
Ура, Пол.
источник
Этот вопрос широко обсуждался на форумах Box2D. Читая обсуждения движений персонажей, прыжков или платформеров, вы обнаружите все возможные проблемы. Однако проблема достаточно усложнилась, и система фильтрации столкновений была обновлена, а пример Test Bed создан исключительно для того, чтобы показать, как это должно быть сделано.
источник