这个范例将会介绍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.编译并运行项目