上QQ阅读APP看书,第一时间看更新
6.2 定时器的缺陷以及改进
上一节介绍了如何在Cocos2d-x中使用定时器,然而不知道有没有人注意到,update方法还带有一个名为dt的参数,它的作用是可以显示上一次调用update方法与本次调用的时间间隔。因此可以将update方法修改为如下内容:
void HelloWorld::update(float dt) { CCLOG("update:%d\t%f",GetCurrentTime(), dt); }
运行程序之后将会输出如图6-2所示的内容。
图6-2 显示每两次调用update方法的时间间隔
从图6-2中可以看出,每两次对update方法进行的时间间隔大致是相同的,而这个近似相同的数值又是固定的。在实际使用时往往还需要使用自定义的时间间隔来调用触发函数,这就是本节所要介绍的内容了。
(1)首先还是创建一个项目,将其命名为ChapterSix02,并在其HelloWorldScene.h中创建myupdate方法。
class HelloWorld : public Cocos2d::Layer { public: static Cocos2d::Scene* createScene(); virtual bool init(); void myupdate(float dt); CREATE_FUNC(HelloWorld); };
(2)然后实现myupdate方法:
void HelloWorld::myupdate(float dt) { CCLOG("update:%d\t%f", GetCurrentTime(), dt); }
(3)之后在init方法中调用myupdate方法:
schedule(schedule_selector(HelloWorld::myupdate),0.2f);
可以看到在schedule方法中有一个参数0.2,这里就是设置每两次调用回调函数的时间间隔的,而第一个参数则是用于确定将被调用的回调函数究竟是哪一个。该程序运行程序之后的结果如图6-3所示。
图6-3 固定自定义每次调用回调函数的时间间隔
诚然,这其中的误差还是比较大的,尤其是某些误差比较大的间隔已经达到了0.217这个级别,但是已经完全够用了,毕竟这只是游戏而不是火箭发射系统之类的项目。