Удалить макет, если он уже
int CMainFrame::OnCreate(LPCREATESTRUCT IpCreateStruct) {
// Загрузить фоновое изображение m_imgBkgnd.Load(IDB BKGND) ;
NewScene() ;
ASSERT(m_pScene) ;
// Создать объект-контроллер m_pController = new CTankCtrl;
m_pController-»Create (&m wnd3d,
OnGetCtrlFrame,
this) ;
// Восстановить конфигурацию контроллера m_pController-»SelectDevice (m_iObjCtrlDev) ;
return 0;
}
Функция NewScene создает макет и задает начальные условия
BOOL CMainFrame::NewScene() (
// Удалить макет, если он уже существует if (m_p3cene) {
m_wnd3d.SetScene(NULL) ;
delete m_pScene;
m_pScene = NULL;
?
Создание собственного контооллеоа движения
/b>
// Создать исходный макет m_pScene = new CSdScene;
if ( !m_pScene-»Create() ) return FALSE;
// Задать источники света C3dDirLight dl;
dl.Create (0.8, 0.8, 0.8);
m pScene-»AddChild(&dl) ;
dl.SetPosition(-2, 2, -5);
dl.SetDirection(l, -1, 1);
m_pScene-»SetAmbientLight(0.4, 0.4, 0.4);
// Установить положение и направление камеры // в исходное состояние m_pScene-»SetCameraPosition (C3dVector (0, 5, -25));
m_pScene-»SetCameraDirection (C3dVector (О, О, 1));
m_wnd3d.SetScene(m_pScene) ;
// Задать фоновое изображение m pScene-»SetBackground(&m_imgBkgnd) ;
// Разместить танк в макете if (!m_pTank) m_pTank = new C3dTank;
m_pScene-»AddChild(m_pTank) ;
m_pTank-»SetPosition(0, 0, 0) ;
m_pTank-»SetDirection(0, 0, 1) ;
return TRUE;
}
Если танк уедет за край окна и потеряется, можно выполнить команду Fite ¦New, чтобы вызвать функцию NewScene и начать все заново. Осталось сказать о последнем изменении, внесенном мной, — когда контроллер запрашивает указатель на фрейм, с которым он должен работать, функция OnGetCtrlFrame возвращает ему указатель на танк:
C3dFrame* CMainFrame::OnGetCtrlFrame(void* pArg) (
CMainFrame* pThis = (CMainFrame*) pArg;
ASSERT(pThis) ;
ASSERT <pThis-»IsKindOf(RUNTIME_CLASS (CMainFrame) ) ) ;
return pThis-»m_pTank;
}
Обратите внимание — хотя функция должна возвращать указатель на C3dFrame, на самом деле она передает указатель на объект C3dTank. Мы пользуемся этим обстоятельством в функции Onllpdate, приведенной на стр. 144. Если раньше вам могло показаться, что преобразование указателя на C3dFrame в указатель на
/b> Ш^ Глава 6. Перемещение объектов в макете
CSdTank выглядит сомнительно, то теперь нетрудно убедиться, что мы имели полное право поступать таким образом.
Пора в дорогу
Хватит возиться с самолетами, часами и танками. Пойдем дальше и посмотрим, как выбираются объекты в макете.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий