Shajirr
200 EGP
  Репутация: 5 Сообщения: 1068 Откуда: TTallllinn Зарегистрирован: 11.03.2007
 |
|
Пытаюсь сделать простой движок для игры с видом сверху вниз.
Главная идея в том, что в физической модели нет "киселя", т.е. тело, к которому не применяются никакие силы, движется с постоянной скоростью.
В рассчетах используются вектора, у каждого вектора есть 2 координаты.
Понятия:
location - местоположение - вектор
velocity - скорость - вектор
acceleration - ускорение - вектор
thrust - тяга - скаляр
В упрощенном виде рассчет положения тела такой:
//часть кода для объектов, имеющих двигатель
direction = new Vector (mouse.x, mouse.y)
тут присваиваем вектор направления ускорения, либо связан с положением мыши напрямую, как в данном случае, либо через какой-либо алгоритм;
direction.normalize(); - нормализуем вектор, чтобы его можно было использовать как базовый множитель в след. операции
тут блок по ограничению величины тяги двигателя
direction.mult(thrust); - умножаем модуль вектора на величину тяги двигателя
acceleration = direction; - теперь рассчитанный верктор можно присвоить вектору ускорения объекта
//эта часть одинаковая у всех объектов
velocity.add(acceleration); - прибавляем ускорение к скорости
location.add(velocity); - прибавляем скорость к местоположению объекта
__________________________
Проблема состоит в том, чтобы организовать нормальное управление кораблем для игрока.
Задача #1
Как организовать изменение направления движения при сохранении постоянной линейной скорости объекта?
Задача #2
Как сделать возможным вращение по круговой орбите вокруг заданной точки с постоянной угловой скоростью?
При этом оперировать мы можем только ускорением.
На данный момент, если вектор направления напрямую задается координатами мыши, т.е. вектор ускорения всегда направлен в центр вращения, то объект просто вращается вокруг курсора по эллиптической орбите.
Последний раз редактировалось: Shajirr (12:43 24-03-2011), всего редактировалось 3 раз(а) |