只有你足够强,别人才会和你讲道理。
文章: 280
浏览: 3,013,532
  • 博主:笨木头
  • 关注:Unity、Net Core、Blazor
  • 邮箱:musicvs@163.com
笨木头  2013-01-29 12:36     Cocos2d-x,Cocos2d-x2.0     阅读(10617)     评论(16)
转载请注明,原文地址: http://www.benmutou.com/archives/58
文章来源:笨木头与游戏开发

我是定时器(第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]

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

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

并且只有一条,不会多。

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

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

(小若:各位一个接一个走,小心台阶。。。)
16 条评论
  • download skype 2015-03-11 09:35:55

    free skype download

    skype download for windows 7
    0回复
  • download java 2015-03-10 06:09:15

    java update

    javascript
    0回复
  • mozilla firefox free download 2015-03-09 13:00:48

    download mozilla firefox

    mozilla firefox download
    0回复
  • free download google 2015-03-09 05:43:50

    Google Chrome Download Free

    Chrome Download
    0回复
  • Vanessa Smith 2015-03-08 06:39:18

    I liked your blog very much.

    I want to thank you for the contribution.
    0回复
  • Cocos2d-x3.0游戏实例之《别救我》第三篇——循环滚动背景 | 笨木头与游戏开发 2014-06-15 09:41:19

    […] 【木头Cocos2d-x 035】我是定时器(第04章)—停止update和触发器 […]
    0回复
  • Halley 2013-08-05 11:22:37

    废话较多,看着够累的,建议楼主整一个系列教程的脱水整合版
    0回复
  • 曼查狂人 2013-05-07 16:14:49

    文章写得不错,讲解很清晰,但是是你排版还是我浏览器的原因?有些行字数太多了后面的就显示不出来了
    0回复
    • 博主 糟糕_树叶的mut 2013-05-07 16:41:39

      谢谢赞扬。。。可能是排版问题,你看看现在还会不会?
      0回复
      • 曼查狂人 2013-05-07 16:58:57

        没错,现在可以了。
        0回复
        • 博主 糟糕_树叶的mut 2013-05-07 17:25:36

  • 【笨木头原创专栏】我是定时器(第04章)—停止update和触发器 | 泰然 - 专注游戏开发 Cocos2d-x教程社区 游戏引擎研究 iPhone游戏开发社区 跨平台解决方案 2013-04-16 09:44:29

    [...] 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/blog/archives/58 [...]
    0回复
  • start530 2013-01-30 08:50:00

    等待内存篇
    0回复
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发