ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX



Перемещение объектов - часть 19


// Воспользоваться информацией POV для задания

// ориентации башни.

// Для этого необходимо работать с объектом C3dTank,

// а не CSdFrame.

C3dTank* pTank = (C3dTank*) pFrame;

ASSERT (pTank-»IsKindOf (RUNTIME_CLASS (C3dTank) ) ) ;

if (st.dPov »= 0) { pTank-»SetTurret (st.dPov) ;

}

// Кнопки З и 4 поднимают и опускают пушку if (st.dwButtons & 0х04) {

m_dGunAngle += 0.1;

» if (st.dwButtons & 0х08) (

m dGunAngle -= 0.1;

} if (m_dGunAngle « 0) {

m dGunAngle =0;

} else if (m_dGunAngle » 45) {

m dGunAngle = 45;

} pTank-»SetGun (m dGunAngle);

// Проверить, не пора ли стрелять if (st.dwButtons & 0х01) { if (!m_bWasFire) 1 pTank-»FireGun () ;

m_bWasFire = TRUE;

} } else (

m_bWasFire = FALSE;

} }

Конструктор лишь инициализирует некоторые локальные данные; вся настоящая работа выполняется в функции Onllpdate. Параметр у задает текущую скорость. Текущая позиция и направление танка хранятся в объектах C3dVector. Параметры х и г определяют матрицу поворота, которая задает новую ориента-

/b> '^р? Глава 6. Перемещение объектов в макете

цию вектора направления. Вектор направления умножается на скорость — полученный вектор смещения складывается с вектором прежнего положения танка. Затем мы перемещаем танк в новое положение и задаем для танка новое направление.

Кнопка выбора вида определяет направление башни. Мы проверяем состояние кнопок 3 и 4, и если они нажаты, то угол подъема пушки изменяется на небольшую величину. Если держать одну из этих кнопок нажатой, башня будет медленно подниматься или опускаться.

Остается лишь учесть кнопку стрельбы. Проверка локальной переменной m_bWasFire предотвращает повторные выстрелы при нажатой кнопке — автоматическое оружие в США запрещено.

Окончательная сборка приложения

За основу приложения Tank был взят код приложения Moving. Я удалил ненужные команды меню и заменил текущую фигуру объектом CSdTank. Кроме того, я включил в макет фоновое изображение. Ниже приведен фрагмент кода, в котором происходит настройка главного окна приложения:




Содержание  Назад  Вперед