在游戏中,经常会遇到下面的一些事件,比如,我们要每隔3秒钟执行一个任务, 首先我们会想到利用这样的方式来实现.
在游戏渲染的每个循环中,增加时间变量的值,如果超过3秒,则执行某个函数,但是,这样有一个弊端,就是实现起来不太方便,
如果事件一多,或者要自定义任务执行的次数,就需要定义很多的变量.
因此,我们可以设计一个TimerManager类,在触发定时任务的地方都通过这个TimerManager类来处理.
下面给出利用我所写的TimerManager类来简单实现定时任务的方法.
1.给Ogre的root添加FrameListender
Ogre::Root* root;
root->addFrameListener(TimerManager::getInstance());
2.首先我们定义任务函数 有两种定义方式,
一是定义为C类型的函数,二是静态C++类的静态方法.
函数如果是类的成员函数,那么必须定义为静态函数,
(注意函数的返回值和参数类型)
void task


{
//do your task here

..
}

//or like this
class taskClass


{
public:
static void task();
}

void taskClass::task()


{
//do your task here
..
}
3.在要触发定时任务的地方这样使用:
//建立一个每3000ms执行一次的定时器
EventTimer* t=TimerManager::getInstance()->createEventTimer(3000);

//定时器执行函数,task执行两次后TimerManager将删除该定时器
t->setCallback(task,2);
t->setCallback(taskClass::task,2);
TimerManager的文件下载:
TimerManager.rar