這個范例將會介紹OGF框架另一個擴(kuò)展功能--物件動作引擎.作為一個游戲必然會涉及到一些對象動作,例如簡單的直線移動,旋轉(zhuǎn),漸變等,高級的話,可能要做貝塞爾的曲線運(yùn)動或作物理的慣性移動,物件動作引擎專門針對這些動作進(jìn)行處理(隨著推廣和改進(jìn),相信會有你所需要的動作添加進(jìn)來).看回一些新手寫的程序,總會將這些處理寫在渲染函數(shù)體內(nèi),控制物體位置的判斷:switch,if語句占了N多行代碼,為此想起寫這么一個引擎,將這些動作的處理更為簡單方便.例如你讓指定物件從A坐標(biāo)移動至B坐標(biāo),OGF會自動在另一線程中幫你處理,你的代碼只需是告訴OGF要做什么動,目標(biāo)是什么就可以了,具體看看下述的示例.
Sample06
簡介:對象動作.
本范例會示范一個隨機(jī)的直線運(yùn)動.運(yùn)行并點(diǎn)擊"Start"按鈕后,Sample05的時(shí)間計(jì)時(shí)器會隨機(jī)在屏幕上移動,直至程序關(guān)閉.
1.添加time.h頭文件引用,為隨機(jī)函數(shù)而加載.在CMainSection構(gòu)造函數(shù)中初始化隨機(jī)種子
srand( (unsigned)time( NULL ) );
2.重載CMainSection類的OnEventAction()方法,以實(shí)現(xiàn)動作執(zhí)行結(jié)束后的回調(diào)處理.
3.在OnSectionIn()方法的返回前,加入以下代碼:
//指定移動的目標(biāo)
_POINT Target;
//隨機(jī)生成目標(biāo)坐標(biāo)
Target.x = rand()%800, Target.y = rand()%600;
//創(chuàng)建一個移動的動作,并標(biāo)識ID為1,動作執(zhí)行5秒,從當(dāng)前坐標(biāo)移動至隨機(jī)生成的坐標(biāo)
theGame->GetActionEngine()->CreateAction(pGameObject, Action_Move, 1, 5000, 1, (WPARAM)&Target);
4.在OnEventAction()事件加入以下代碼:
if(wActionID==1){
//隨機(jī)生成目標(biāo)坐標(biāo)
_POINT Target;
Target.x = rand()%800, Target.y = rand()%600;
//再次創(chuàng)建一個移動的動作
theGame->GetActionEngine()->CreateAction(pIGameObject, Action_Move, 1, 5000, 1, (WPARAM)&Target);
}
return true;
5.編譯并運(yùn)行項(xiàng)目