Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 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) Может быть, это вообще все по-другому делается?

Создать новую тему   Часовой пояс GMT +4, время: 08:59.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 08:59.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.