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