Моделирование бега человека по футбольному полю - PullRequest
9 голосов
/ 25 января 2010

В футбольной игре я вычисляю управляющую силу, используя рулевое поведение. Эта часть в порядке. Тем не менее, я ищу лучший способ реализовать простую двумерную человеческую локомоцию.

Например, игрокам не следует «управлять» (или просто добавлять ускорение, рассчитанное по силе рулевого управления) к его текущей скорости, когда cos (угол) между силой рулевого управления и текущей скоростью или векторами курса меньше 0,5, поскольку выглядит так, как будто игрок автомобиль. Человек, когда происходит важное изменение направления, замедляется, а когда он достаточно замедляется, он начинает ускоряться в новом направлении.

У кого-нибудь есть какие-либо советы, идеи о том, как добиться такого поведения? Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 25 января 2010

Сделайте так, чтобы оно меняло направление очень быстро, но без идеального трения. EG super mario

Редактировать: но ноги не должны скользить - используйте процедурную анимацию для ног

3 голосов
/ 25 января 2010

Это уже исследовано и разработано в рамках инициативы под названием «Robocup». У них есть 2D-лига моделирования, которая должна быть действительно похожа на то, что вы пытаетесь достичь.

Вот ссылка, которая должна указывать вам правильное направление: http://wiki.robocup.org/wiki/Main_Page

2 голосов
/ 25 января 2010

Может быть, вы могли бы вычислить кривизну. Если значение кривизны слишком велико, скорость замедляется. http://en.wikipedia.org/wiki/Curvature

1 голос
/ 26 июля 2012

На низкой скорости человек может включить ни копейки. На высокой скорости только очень незначительные повороты не требуют замедления. Скорость и радиус поворота, таким образом, сильно взаимосвязаны.

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

Вот как бы я это сделал. Я прошу прощения за имперские единицы, если вы предпочитаете метрические.

  1. Самый быстрый человек, когда-либо зарегистрированный, проехал чуть менее 28 миль в час. Каждой из ваших человеческих единиц должна быть назначена личная максимальная скорость от 1 до 28 миль в час.
  2. Создайте 29-элементную таблицу максимальных скоростей ускорения и замедления человека, движущегося на каждой целой мили в час по прямой линии. Это не должно быть точно - просто приблизительные значения ускорения и замедления для каждого значения. Создайте быстрые, средние, медленные версии таблицы из 29 элементов и назначьте каждого человека в одну из этих таблиц. Выбранная таблица может быть привязана к максимальной скорости устройства, поэтому устройство с максимальной скоростью 10 миль в час будет медленным ускорителем.
  3. Создайте таблицу из 29 элементов самого острого радиуса, которую человек может повернуть за эту милю в час (0-28).

Теперь, когда вы анимируете каждую человеческую единицу, если у вас есть целевая информация и вы должны выбрать из этого ускорение, задача сложнее. Если вместо этого у вас есть вектор силы, это проще. Давайте начнем с вектора силы.

  1. Если суммарное ускорение и результирующий угол вектора силы превысит предел способности устройства, ограничьте новый вектор устройства максимально допустимым углом, а также замедлите устройство с максимальной скоростью для его текущей линейной скорости.
  2. Во время следующего такта, будучи медленнее, он сможет вращаться более резко.
  3. Если вектор силы может быть полностью согласован, но блок движется медленнее, чем его максимальная скорость для этой кривизны, примените максимальное ускорение, которое имеет блок на этой скорости.

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

Для версии пути, где у вас есть цель и вам нужно выбрать силу для применения, проблема немного другая, и даже сложнее. У меня пока нет идей - но достаточно сказать, что, учитывая примерное состояние человека, уже убегающего от цели на максимальной скорости, будет путь наилучшего времени, с одной стороны, достаточно медленный при повороте, чтобы совершить идеальную дугу к цели, и с другой стороны, полностью остановиться, полностью вращаться и бежать прямо к цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...