我是定时器(第04章)—停止update和触发器
有时候我们并不想不断地执行一个函数,我们只希望在20
秒后执行一个函数,然后就不执行了。比如,我们用微波炉烤西红柿,3分钟之后要叮地响一下,但是只要响一下就好了,不要每隔3分钟都响,那太烦人了!(小若:西红柿?!为毛是西红柿?微波炉啊,烤西红柿?!= =)笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址:http://www.benmutou.com/archives/58正文:1. 取消自定义update的调用当我们想停止
update调用的时候,可以这么做:[cce_cpp]void HelloWorld::MutUpdate( float fDelta )
{
CCLOG("MutUpdate");
this->unschedule(schedule_selector(HelloWorld::MutUpdate));
}[/cce_cpp]
unschedule
,顾名思义了,un一般是代表取消的意思。但是要注意一点,不管我们注册update函数的时候,用的是一个参数,还是两个参数,在取消的时候都是不需要传其他参数的,只要传递函数就OK了。(小若:我总觉得,听你解释不如直接看代码。)大家用调试模式运行项目,就会发现,日志只打印了一次。
2. 取消默认update的调用如果是要取消默认的
update函数调用,也很简单:[cce_cpp]this->unscheduleUpdate();[/cce_cpp]
取消和注册是对应的,从函数名称就可以看出来了,不唠叨了,我不太喜欢唠叨。
(小若:才怪啊!)3. 更暴力的,取消全部update函数的调用我们来试试一件好玩的事情,就是两种
update函数一起注册:[cce_cpp]bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
this->scheduleUpdate();
/* 指定每帧执行自定义的函数 */
this->schedule(schedule_selector(HelloWorld::MutUpdate));
bRet = true;
} while (0);
return bRet;
}[/cce_cpp]
我们把
scheduleUpdate和schedule一起使用了,用调试模式运行项目试试,很有意思,我们将看到,它们都工作地很好:update
MutUpdate
update
MutUpdate
update
MutUpdate
update
MutUpdate
如果想停止
update调用呢?(小若:分别调用它们的取消函数啊!)说得好,但是这么做太笨了!
(小若:咕。。。)我们只需要一行代码:
[cce_cpp]this->unscheduleAllSelectors();[/cce_cpp]
相信不用我解释了,调用这个函数之后所有的
update函数都不会被调用。4. 触发器好了,说了这么多,我的西红柿要烤焦了!
(小若:叮啊!你不是说它会叮一下吗!)OK
,我们来让它叮一下,就一下,不多不少。[cce_cpp]bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
/* 指定若干秒后执行一次函数 */
this->scheduleOnce(schedule_selector(HelloWorld::MutUpdate), 5.0f);
bRet = true;
} while (0);
return bRet;
}[/cce_cpp]
scheduleOnce,
顾名思义,once,只执行一次,第二个参数是延迟时间,单位是秒。表示多少秒之后开始执行这个函数,并且只执行一次。OK
,调试模式运行项目,5秒后我们将看到一条输出:MutUpdate
并且只有一条,不会多。
好喇,关于定时器的教程结束了
~旁白出来清下场,各位按秩序离开。(小若:我才不会配合你发神经。。。)(小若:各位一个接一个走,小心台阶。。。)