定时器的使用

Cocos2d-x将定时器成为schedule,根据输入参数的不同,实现定时器的方法略有不同。使用Cocos2d-x制作游戏时,建议使用schedule,而不要用C++语句提供的默认定时器。

接下来小小的总结下定时器的使用:

1.bool MenuScene::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
this->schedule(schedule_selector(MenuScene::scheduleCallBack),1.0);
return true;
}

void MenuScene::scheduleCallBack(float delta)
{
CCLOG("scheduleCallBack:%f",delta);
}


代码中,schedule()方法带有两个参数,第一个参数指定要调用的方法名称,但是不直接放入方法名,而是通过选择器调用的方法。把调用的方法放入选择器时,脂肪乳类名与方法名,不用带参数。第二个参数设置调用第一个参数指定方法的时间间隔。

我们先来看下运行结果:


从调试窗口可以看出,值要比1.0略大一些。这是为什么呢?

这是因为,定时器方法调用的时间由AppDelegat.cpp中setAnimationInterval()方法设置的时间确定。比如将游戏主动画的时间设置为0.1秒,那么即使将定时器方法中的回调时间间隔设置为0.05秒,定时器的方法也会以主动画时间间隔0.1秒被调用。在上述的实例中,主动画的时间间隔设置为1.0/60秒,约0.016秒,故准确的说,定时器方法不是每隔1.0秒调用一次,而是在每隔0.016秒被调用的主动画定时器中,过1秒再调用,所以调试窗口输出的值比1.0略大些。


2.bool MenuScene::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
this->schedule(schedule_selector(MenuScene::scheduleCallBack),1.0,5,5.0);
return true;
}


上述代码的前两个参数与上个例子相同,第三个参数用于设置回调方法被调用执行的次数。上述代码将回调方法的调用次数设置为5次,而不是无限调用。所以,上面标记的语句的含义为:先等待5秒钟,然后调用一次回调方法,再每隔1秒调用五次回调方法。最终,回调方法的总调用次数总比设定的多一次,共被调用6次。

我们来看下结果:



3.bool MenuScene::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
this->schedule(schedule_selector(MenuScene::scheduleCallBack));
return true;
}

定时器方法仅仅带有一个参数,用于指定回调方法,且指定时只给出回调方法名。此时,回调方法将根据APPDelegate.cpp中设置的主动画时间(1.0/60秒)时间间隔进行调用。运行结果如图:



4.bool MenuScene::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
this->scheduleOnce(schedule_selector(MenuScene::scheduleCallBack),5.0);
return true;
}

scheduleOnce()方法对指定的回调方法只调用一次,它带有两个参数,第一个参数指定回调方法,第二个参数指定调用回调方法之前要等待的时间。

运行结果如图:


到此为止,总共介绍了4种定时器方法,此外还有scheduleUpdateWithPriority()方法,它指定调用优先级,画面中包含多个层要调用多个scheduleUpdate()方法时,可以设定调用顺序。

欢迎大家指出不足!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值