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()方法时,可以设定调用顺序。
欢迎大家指出不足!