天天看點

[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,如需轉載請自行聯系原作者

繼續閱讀