正文:
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>->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->scheduleUpdate()函數是為了把目前節點(比如CCLayer)添加到隊列裡,也許不是隊列,總是一個隊列。
(小若:算了,你别解釋了。。。)
隻要把節點添加到隊列裡(或許是其它結構,總之可以存放節點),那麼這個節點就會在遊戲運作的每一幀被調用一次update函數。
我們也看到,update函數裡有一個float fDelta參數,這個參數的意思是,上一次調用這個函數到本次調用這個函數,中間間隔了多少秒。
好了,隻是介紹性的教程,就不說得太多了。
(小若:等等!這根本就不像定時器!一點都不定時!!)
本文轉蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366386,如需轉載請自行聯系原作者