天天看点

[cocos2d-x]定时器函数scheduleUpdate

正文:

1. scheduleUpdate

我们现在来新建一个Cocos2d-x的项目,然后把HelloWorldScene的init函数的多余代码删掉,然后我们敲一行代码:

<a href="http://blog.51cto.com/dingxiaowei/1366386#">?</a>

1

<code>bool</code> <code>HelloWorld::init() {     </code><code>bool</code> <code>bRet = </code><code>false</code><code>;     </code><code>do</code>     <code>{         CC_BREAK_IF(! CCLayer::init());          </code><code>this</code><code>-&gt;scheduleUpdate();          bRet = </code><code>true</code><code>;     } </code><code>while</code> <code>(0);      </code><code>return</code> <code>bRet; }</code>

然后大家运行项目,有没有发现?神奇的事情发生了!

(小若:哪里?什么都没有!黑屏!)

别着急,还差一步(小若:你有妹妹吗?帮我问候一下?),我们要继承一个函数,在头文件里加入一句:

<code>class</code> <code>HelloWorld : </code><code>public</code> <code>cocos2d::CCLayer { </code><code>public</code><code>:     </code><code>virtual</code> <code>bool</code> <code>init();     </code><code>static</code> <code>cocos2d::CCScene* scene();     </code><code>void</code> <code>menuCloseCallback(CCObject* pSender);     CREATE_FUNC(HelloWorld);     </code><code>/* update函数 */</code>  <code>virtual</code> <code>void</code> <code>update(</code><code>float</code> <code>fDelta); };</code>

然后在函数里打印日志:

<code>void</code> <code>HelloWorld::update( </code><code>float</code> <code>fDelta ) {   CCLOG(</code><code>"update"</code><code>); }</code>

最后,用调试模式运行,我们将看到一串串的日志输出:

update

Update

(小若:!!!)

2. 轻微解释原理

这倒底是什么情况?我们已经实现了定时器了,就是这么简单。我稍微解释一下,不会太深入。

(小若:你也没有那个水平= =)

this-&gt;scheduleUpdate()函数是为了把当前节点(比如CCLayer)添加到队列里,也许不是队列,总是一个队列。

(小若:算了,你别解释了。。。)

只要把节点添加到队列里(或许是其它结构,总之可以存放节点),那么这个节点就会在游戏运行的每一帧被调用一次update函数。

我们也看到,update函数里有一个float fDelta参数,这个参数的意思是,上一次调用这个函数到本次调用这个函数,中间间隔了多少秒。

好了,只是介绍性的教程,就不说得太多了。

(小若:等等!这根本就不像定时器!一点都不定时!!)

本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366386,如需转载请自行联系原作者

继续阅读