GTA2 похож на Car Physics, но чрезвычайно упрощен - PullRequest
5 голосов
/ 02 марта 2012

Хорошо, так что эта проблема беспокоит меня долгое время. Может кто-нибудь показать мне или указать мне алгоритм, который может управлять автомобилем, как у GTA2? После 3 дней исследований все, что я мог придумать, было все эти алгоритмы для использования шарнира и шарниров на колесах и отдельных колес и тому подобное. Это единственный способ добиться простого движения автомобиля, как у GTA2?

Я хочу использовать алгоритм на прямоугольнике без колес, но при этом иметь возможность дрейфовать машину. Это возможно? Кстати, я использую Box2D для 2D-игры.

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

Ответы [ 2 ]

8 голосов
/ 13 марта 2012

Простой ответ, который может превратиться во что-то довольно большое, поэтому я попытаюсь объяснить, представив различные моменты в порядке возрастания сложности. Я буду принимать базовые знания по физике.

  1. Предположим, фиксированный радиус поворота (не так уж плохо, если вы используете клавиатуру, довольно раздражает, если у вас есть аналоговый контроллер). Ничего подобного пробовать разные позиции, чтобы узнать, какой радиус чувствует себя хорошо.

  2. Предположим, что у вас есть колеса, которые изначально направлены вперед, и при нажатии клавиши поворота они постепенно поворачиваются до максимально возможного. В основном это означает уменьшение радиуса от бесконечности до наименьшего возможного радиуса (вы можете легко выяснить соотношение между углом колес и радиусом). Если у вас есть аналоговый контроллер, то радиус должен контролироваться непрерывными значениями аналогового входа.

  3. Пусть войдут силы! Когда вы поворачиваете в машине, вы поворачиваете только из-за центростремительного ускорения. Это центростремительное ускорение вызвано силой, которая фактически является трением автомобиля с дорогой. Вы можете считать трение константой и массу вашего транспортного средства постоянной без особых проблем, тогда у вас будет взаимосвязь между скоростью автомобиля и критическим радиусом (минимальный радиус, который вы можете поворачивать при данной скорости). Центростремительное ускорение равно a = v ^ 2 / r = трение / масса, поэтому критический радиус r = v ^ 2 * масса / трение. Вы можете учесть, что независимо от того, на сколько вы развернетесь, ваше транспортное средство будет дрейфовать, и, максимально, опишите эту кривую. Это должно дать вам хорошую симуляцию, но все же не чувство «потери контроля». Для этого смотрите следующий пункт! круговое движение

  4. Теория точно такая же, как и в предыдущем пункте, но главное, что трение в реальности не является постоянным. Фактически, статическое трение всегда будет выше, чем кинетическое. На практике у вас должно быть статическое трение и (меньшее) кинетическое трение. Вы вычисляете r в соответствии со статическим трением, и когда ваша скорость слишком велика для достижения этого r (это когда вы дрейфуете), вы начинаете вычислять новое r с использованием кинетического трения. Это даст вам ощущение потери контроля, но автомобиль все равно не будет вращаться. Трение

  5. Чтобы увидеть вращение, вы должны учитывать силы, приложенные к каждому колесу (именно тот факт, что разные колеса находятся под разными силами, которые заставляют автомобиль вращаться), и рассмотреть более продвинутую физику, такую поскольку какие колеса являются ведущими колесами, а также рассматривают кинетическое трение не как постоянное. Однако я считаю, что это выходит за рамки вашей компетенции.

  6. В качестве альтернативы вы можете сделать то, что GTA2, казалось, делал В тот момент, когда вы знаете, что собираетесь дрейфовать или слишком дрейфуете (вы устанавливаете здесь порог), просто программным путем вынуждаете автомобиль терять управление и вращаться.

Надеюсь, это поможет, если у вас есть какие-то конкретные сомнения, просто спросите.

1 голос
/ 07 апреля 2012

Я обнаружил, что http://www.banditracer.eu/carexample/ продемонстрировал простой пример использования Box2D для отображения движения автомобиля. http://www.banditracer.eu/ имеет игру с открытым исходным кодом, которую вы можете наблюдать, чтобы увидеть, есть ли у нее дрейфующее движение, которое вы ищете. Вы можете проверить код и посмотреть, как они обрабатывают дрейфующее движение и делают то же самое для вашего проекта.

...