Танк готов. Осталось научиться управлять
Танк готов. Осталось научиться управлять им.
Контроллер танка
Большая часть кода контроллера находится в классах C3dWnd и C3dController. Чтобы создать собственный контроллер, необходимо лишь ввести новый класс, производный от CSdController, переопределить в нем функцию OnUpdate и установить новый контроллер в своем приложении. Однако перед тем, как писать функцию OnUpdate, следует распределить параметры джойстика
/b> Д1' Глава 6. Перемещение объектов в макете
по выполняемым функциям. Конфигурация, на которой я остановился, приведена в табл. 6-3.
Таблица 6-3. Управление танком
Входной параметр Параметр танка
у Скорость
х Поворот
r Поворот POV (кнопка выбора вида) Направление башни
Кнопки 3 и 4 Подъем и опускание пушки
Кнопка 1 Выстрел из пушки
Я решил использовать параметры х и г для поворотов, чтобы даже при наличии самого простого джойстика с двумя осями можно было управлять танком. Я выбрал для этого приложения джойстик SideWinder Pro — он дает более реалистичные ощущения, чем SpaceBall. К тому же кнопка выбора вида, находящаяся на рукояти джойстика, замечательно подходит для поворотов башни.
Определившись с управлением, можно писать программу. Весь код контроллера состоит из двух функций:
CTankCtrl::CTankCtrl () (
m_dGunAngle = 25;
m_bWasFire = FALSE;
}
void CTankCtrl::OnUpdate(_3DIMPUTSTATE& st, C3dFrame* pFrame) {
// Задать скорость (руководствуясь значением у)
double v = st.dY / 2;
// Определить текущее положение C3dVector pos;
pFrame-»GetPosition (pos) ;
// Получить текущий вектор направления C3dVector dir, up;
pFrairie-»GetDirection(dir, up) ;
// Определить новое направление (с учетом
// параметров х и г)
double dr = -st.dX + -st.dR;
C3dMatrix
r;
r.Rotate(0, dr * 3, 0) ;
dir = r * dir;
Создание собственного контроллера движения 'т^
159
// Умножить вектор направления на скорость, // чтобы определить смещение танка C3dVector ds = dir * v;
// Задать новое положение и направление pos += ds;
pFrame-»SetPosition (pos) ;
pFrame-»SetDirection (dir) ;
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий