2010-01-25 1 views
9

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

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

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

ответ

4

Сделать это изменение направление очень быстро, но без совершенного трения. EG супер Марио

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

+0

У меня нет такой сложной графики, сейчас просто GDI + для рисования сверху вниз поля и игроков. Вы имеете в виду, что на каждом шаге я должен просто установить вектор скорости в том же направлении, что и вычисленное ускорение (от силы рулевого управления), и если cos (угол) был ниже определенного значения (обозначающего большое изменение направления) , Я должен сбросить скорость до добавления величины ускорения? Это заставит игрока всегда идти в правильном направлении, и если он должен резко изменить направление, его скорость спустится до нуля перед повторным ускорением. – sowee15

2

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

+1

Не будет ли использовать cos (угол) между текущей скоростью и требуемым усилием рулевого управления в несколько эквивалентном и более простом? – sowee15

+0

да это проще – kame

3

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

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

+0

Да, я знаю Robocup, и вы правы, это очень похоже на то, что я делаю. Должен признаться, что я не проверил исходный код сервера, но видел видеоизображенные модели robocup на youtube. Я думаю, что поведение должно быть похоже на то, что я описал в CMY-комментарии к tm1rbrt (см. Выше)? – sowee15

1

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

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

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

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

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

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

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

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

Смежные вопросы