Cocos2d-x游戏开发实战精解
上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这个级别,但是已经完全够用了,毕竟这只是游戏而不是火箭发射系统之类的项目。