![Cocos2d-x游戏开发实战精解](https://wfqqreader-1252317822.image.myqcloud.com/cover/453/27110453/b_27110453.jpg)
上QQ阅读APP看书,第一时间看更新
6.2 定时器的缺陷以及改进
上一节介绍了如何在Cocos2d-x中使用定时器,然而不知道有没有人注意到,update方法还带有一个名为dt的参数,它的作用是可以显示上一次调用update方法与本次调用的时间间隔。因此可以将update方法修改为如下内容:
void HelloWorld::update(float dt) { CCLOG("update:%d\t%f",GetCurrentTime(), dt); }
运行程序之后将会输出如图6-2所示的内容。
![](https://epubservercos.yuewen.com/92B5CF/15477638304523706/epubprivate/OEBPS/Images/00106.jpg?sign=1739323116-9Dnz1U9re86oI6j7CMlvXCygRMlPr4EF-0-7a278e90e8facbd8e4919e0ee0b4df1f)
图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所示。
![](https://epubservercos.yuewen.com/92B5CF/15477638304523706/epubprivate/OEBPS/Images/00107.jpg?sign=1739323116-1pOl8eswdu95FV1yZV1R5Df76fuVwFEk-0-c6939eeeb5c1eac1e3a7eea1032e13b9)
图6-3 固定自定义每次调用回调函数的时间间隔
诚然,这其中的误差还是比较大的,尤其是某些误差比较大的间隔已经达到了0.217这个级别,但是已经完全够用了,毕竟这只是游戏而不是火箭发射系统之类的项目。