读书人

【木头Cocos2d-x 035】小弟我是定时器

发布时间: 2013-02-02 12:27:16 作者: rapoo

【木头Cocos2d-x 035】我是定时器(第04章)—停止update和触发器

我是定时器(第04章)—停止update和触发器

有时候我们并不想不断地执行一个函数,我们只希望在20秒后执行一个函数,然后就不执行了。比如,我们用微波炉烤西红柿,3分钟之后要叮地响一下,但是只要响一下就好了,不要每隔3分钟都响,那太烦人了!

(小若:西红柿?!为毛是西红柿?微波炉啊,烤西红柿?!= =)

笨木头花心贡献,啥?花心?不呢,是用心~

转载请注明,原文地址:http://blog.csdn.net/musicvs/article/details/8552045

正文:

1. 取消自定义update的调用

当我们想停止update调用的时候,可以这么做:

void HelloWorld::MutUpdate( float fDelta ){CCLOG("MutUpdate");this->unschedule(schedule_selector(HelloWorld::MutUpdate));}

unschedule,顾名思义了,un一般是代表取消的意思。但是要注意一点,不管我们注册update函数的时候,用的是一个参数,还是两个参数,在取消的时候都是不需要传其他参数的,只要传递函数就OK了。

(小若:我总觉得,听你解释不如直接看代码。)

大家用调试模式运行项目,就会发现,日志只打印了一次。

2. 取消默认update的调用

如果是要取消默认的update函数调用,也很简单:

this->unscheduleUpdate();


取消和注册是对应的,从函数名称就可以看出来了,不唠叨了,我不太喜欢唠叨。

(小若:才怪啊!)

3. 更暴力的,取消全部update函数的调用

我们来试试一件好玩的事情,就是两种update函数一起注册:

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;}


我们把scheduleUpdate和schedule一起使用了,用调试模式运行项目试试,很有意思,我们将看到,它们都工作地很好:

update

MutUpdate

update

MutUpdate

update

MutUpdate

update

MutUpdate

如果想停止update调用呢?

(小若:分别调用它们的取消函数啊!)

说得好,但是这么做太笨了!

(小若:咕。。。)

我们只需要一行代码:

this->unscheduleAllSelectors();


相信不用我解释了,调用这个函数之后所有的update函数都不会被调用。

4. 触发器

好了,说了这么多,我的西红柿要烤焦了!

(小若:叮啊!你不是说它会叮一下吗!)

OK,我们来让它叮一下,就一下,不多不少。

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;}


scheduleOnce,顾名思义,once,只执行一次,第二个参数是延迟时间,单位是秒。表示多少秒之后开始执行这个函数,并且只执行一次。

OK,调试模式运行项目,5秒后我们将看到一条输出:

MutUpdate

并且只有一条,不会多。

好喇,关于定时器的教程结束了~旁白出来清下场,各位按秩序离开。

(小若:我才不会配合你发神经。。。)

(小若:各位一个接一个走,小心台阶。。。)

1楼start530前天 08:50
等待内存篇
Re: musicvs前天 09:06
回复start530n估计周末哈,我得补补内存方面的知识,免得误导人了~~

读书人网 >操作系统

热点推荐