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

笨木头  2013-01-28 21:46   Cocos2d-x,Cocos2d-x2.0   阅读(13,777)   13条评论

我是定时器第02—HelloWorldscheduleUpdate

Cocos2d-x提供了不少定时功能,这次我们先来最简单的。

笨木头花心贡献,啥?花心?不呢,是用心~

转载请注明,原文地址
http://www.benmutou.com/archives/56

正文:

1. scheduleUpdate

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool HelloWorld::init()
{
    bool bRet = false;
    do
    {
        CC_BREAK_IF(! CCLayer::init());

        this->scheduleUpdate();

        bRet = true;
    } while (0);

    return bRet;
}

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

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

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

1
2
3
4
5
6
7
8
9
10
11
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);
};

然后在函数里打印日志:

1
2
3
4
void HelloWorld::update( float fDelta )
{
    CCLOG("update");
}

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

update

update

update

update

update

update

update

update

Update

(小若:!!!)

2. 轻微解释原理

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

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

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

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

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

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

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

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

关于定时这个问题嘛,总有人喜欢不准时的~下一节再介绍那些永远都准时的人~

(小若:吊胃口什么的对我才没有效!)

13 评论

  1. Pingback: skype download
  2. Pingback: javascript
  3. Pingback: download firefox
  4. Pingback: chrome download
  5. Pingback: Vanessa Smith

发表评论

电子邮件地址不会被公开。 必填项已用*标注