анимация

Ключевые кадры

Теперь мы переходим к будничной, но абсолютно необходимой части анимации. Чтобы анимировать объект вы задаете серию ключевых кадров. В каждом кадре вы вносите какое-нибудь изменение, чтобы объект отличался от своего изображения в предыдущем кадре.

Объекты

Объекты — это источник жизненной силы трехмерной анимации. Без объектов не было бы ни сцен ни анимации. Что такое объект? В этой главе объектом будет называться трехмерная модель, состоящая из полигонов, цветов и текстур. Возьмем к примеру механоида, упомянутого мной минутой раньше.

Сцена

Первое, что потребуется вам для трехмерной анимации — сцена. Сцена это всего лишь набор трехмерных объектов. Звучит элементарно, правда?

Обзор трехмерной анимации

Сперва выясним, что же такое трехмерная анимация? В двух словах — это выполнение действий с одним или несколькими объектами в трехмерном пространстве, изменяющих их с течением времени каким-либо образом. Думаете, почему это нужно вам, разработчику стратегических игр?

Обновление кадра анимации

Перед тем как я погружусь в работу функции обновления подразделений, давайте взглянем на следующий код:

// Обновление подразделений
if(timeGetTime() > dwLastUpdateTime) {
vUpdateUnits();
dwLastUpdateTime = timeGetTime() + 33;
}

Отображение активных подразделений

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

// Цикл перебирающий подразделения
for(int i = 0; i < m_UnitManager.m_iTotalUnitObjs; i++) {
// Устанавливаем указатель на подразделение
ptrUnit = &m_UnitManager.m_UnitObjs[i];

Рисование подразделений

Все эти классы великолепны, но как насчет визуализации? Если вы откроете файл main.cpp из проекта D3DFrame_UnitTemplate, я покажу вам! Спускайтесь вниз до функции vInitTileVB().

Создание подразделений

Теперь, после того как базовая информация о подразделених загружена, вы можете создавать подразделения, которые будут использоваться в игре. Вы не можете модифицировать базовые типы, так что следует создавать новые объекты подразделений. Здесь в игру вступает член данных диспетчера подразделений с именем m_UnitObjs.

Загрузка базовых типов

У вас есть базовые классы для хранения данных подразделения, но как загрузить в них информацию? Один из способов — жестко задать все значения параметров подразделений в коде программы. Подобное сляпанное наспех решение не позволит создать гибкую систему.

Функция CUnit::vSetBaseValues()

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

void CUnit::vSetBaseValues(CUnitDefense* ptrDef,
CUnitOffense* ptrOff1,
CUnitOffense* ptrOff2,
CUnitOffense* ptrOff3,



RSS-материал