天天看點

【木頭Cocos2d-x 033】我是定時器第02章—HelloWorld之scheduleUpdate

我是定時器第02章—HelloWorld之scheduleUpdate

Cocos2d-x提供了不少定時功能,這次我們先來最簡單的。

笨木頭花心貢獻,啥?花心?不呢,是用心~

轉載請注明,原文位址:http://blog.csdn.net/musicvs/article/details/8550403

正文:

1. scheduleUpdate

我們現在來建立一個Cocos2d-x的項目,然後把HelloWorldScene的init函數的多餘代碼删掉,然後我們敲一行代碼:

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        CC_BREAK_IF(! CCLayer::init());

        this->scheduleUpdate();

        bRet = true;
    } while (0);

    return bRet;
}
           

然後大家運作項目,有沒有發現?神奇的事情發生了!

(小若:哪裡?什麼都沒有!黑屏!)

别着急,還差一步(小若:你有妹妹嗎?幫我問候一下?),我們要繼承一個函數,在頭檔案裡加入一句:

class HelloWorld : public cocos2d::CCLayer
{
public:
    virtual bool init();  
    static cocos2d::CCScene* scene();
    void menuCloseCallback(CCObject* pSender);
    CREATE_FUNC(HelloWorld);

	/* update函數 */
	virtual void update(float fDelta);
};
           

然後在函數裡列印日志:

void HelloWorld::update( float fDelta )
{
	CCLOG("update");
}
           

最後,用調試模式運作,我們将看到一串串的日志輸出:

update

update

update

update

update

update

update

update

Update

(小若:!!!)

2. 輕微解釋原理

這倒底是什麼情況?我們已經實作了定時器了,就是這麼簡單。我稍微解釋一下,不會太深入。

(小若:你也沒有那個水準= =)

this->scheduleUpdate()函數是為了把目前節點(比如CCLayer)添加到隊列裡,也許不是隊列,總是一個隊列。

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

隻要把節點添加到隊列裡(或許是其它結構,總之可以存放節點),那麼這個節點就會在遊戲運作的每一幀被調用一次update函數。

我們也看到,update函數裡有一個float fDelta參數,這個參數的意思是,上一次調用這個函數到本次調用這個函數,中間間隔了多少秒。

好了,隻是介紹性的教程,就不說得太多了。

(小若:等等!這根本就不像定時器!一點都不定時!!)

關于定時這個問題嘛,總有人喜歡不準時的~下一節再介紹那些永遠都準時的人~

(小若:吊胃口什麼的對我才沒有效!)