Показать сообщение отдельно
Старый 30.07.2010, 03:06
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 1  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
Question Математическая модель игры

Проектирую игру. Ее суть примерно такая:
на игровом поле (вид сверху) присутствуют N машинок. Игрок управляет половиной из них. Его задача протаранить вражеские машинки. Вражеская машинка, управляемая AI, уничтожается только, когда ее таранишь сбоку.
Управление машинкой организовано так - выделяем юнит, тыкаем место на карте, она туда едет. Машинка должна ускоряться до максимальной скорости, а когда подъезжает к месту - плавно тормозить. При резких поворотах на скорости ее должно слегка заносить (движение не по ходу колес, а перпендикулярно).

Столкнулся с проблемой, как все это математически лучше описать и накодить.

Мои мысли примерно такие - характеризовать каждый юнит положением, вектором скорости, собственным радиусом и целью, куда ехать. Цель не обязательный параметр. В каждом enterFrame делаем расчет положений юнитов и рассчитываем столкновения. Столкновения это отдельная тема, больше интересует расчет положений юнитов.

Прикинул алгоритм расчета положения для постоянной скорости:

1) Положение машинки характеризуется множеством {x;y}. Скорость в полярных координатах {V;phi} (V - абсолютное значение, phi - угол по отношению к горизонтали).
2) Предположим, машинка до появления цели стояла на месте. Появилась цель с координатами {targetX;targetY}. Делаем V=V+1, вычисляем угол цели. phi выставляем равной этому углу.
3) В следующем кадре переводим полярные координаты скорости в декартовы {Vx, Vy}, делаем x = x+Vx, y=y+Vy.
4) Повторяем пункт 3, пока машинка не доедет до цели, остановим ее.

2а) Если у машинки до появления цели, уже была скорость, то поворачиваем phi на какой-то градус, и в каждом шаге вычисляем угол до цели, пока углы phi и угол до цели не совпадут.

Теперь основные вопросы.

1) Не будет ли расчет угла до цели в каждом кадре накладным процессом? Перевод полярных в декартовы координаты?
2) Я все описал для постоянной скорости, а как для ускорения/торможения контролировать абсолютное значение скорости? Как узнать, когда пора "тормозить"? Например, машинка движется вправо, а цель строго под ней. Пока она повернет, опишет дугу. Но в какой-то момент движения по дуге, надо будет сбавлять скорость. Как это ненакладно вычислить, я не представляю. Нужно как минимум в каждом кадре высчитывать расстояние до цели, решать уравнение, и вычислять "через сколько" машинка доедет, и не пора ли сбавлять газ.

Для 10 юнитов на карте, это может серьезно все затормозить, или я ошибаюсь?

3) Может быть, это вообще все по-другому делается?