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