码迷,mamicode.com
首页 > 其他好文 > 详细

cocos2d 中 scene(), create(), init() 调用关系

时间:2014-09-25 14:21:08      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:cocos2d   c++      create_func   init   

最近在学cocos2d,刚上手时对示例程序的函数调用关系不是很清楚。昨晚刚刚搞清楚,记录下。

1. 首先来看main函数:

    AppDelegate app; // 创建一个AppDelegate对象
    ...
    return CCApplication::sharedApplication()->run(); // 运行 app 对象

2. 再看 AppDelegate 类:

virtual bool applicationDidFinishLaunching(); // CCApplication::sharedApplication()->run(); 之后首先执行此函数
// Implement CCDirector and CCScene init code here.
bool AppDelegate::applicationDidFinishLaunching() {
    ...
    // create a scene. it's an autorelease object
    CCScene *pScene = HelloWorld::scene();
    pDirector->runWithScene(pScene);
    return true;
}

调用了层类(Layer)HelloWorld 的scene() 方法,并且通过 CCDirector 的一个实例来执行。

3. 最后看 HelloWorld 的 scene() 方法

CCScene* HelloWorld::scene()
{
    // 'scene' is an autorelease object
    CCScene *scene = CCScene::create();
    
    // 'layer' is an autorelease object
    HelloWorld *layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}
这时候会有疑问,那 HelloWorld::init() 方法在哪儿使用了?而且 HelloWorld 哪儿有 create() 方法?

这个时候,定位create() 方法,指向 CREATE_FUNC(HelloWorld);

/**
 * define a create function for a specific type, such as CCLayer
 * @__TYPE__ class type to add create(), such as CCLayer
 */
#define CREATE_FUNC(__TYPE__) static __TYPE__* create() {     __TYPE__ *pRet = new __TYPE__();     if (pRet && pRet->init())     {         pRet->autorelease();         return pRet;     }     else     {         delete pRet;         pRet = NULL;         return NULL;     } }
根据宏定义可以知道,create() 即为CREATE_FUNC();将__TYPE__换成 HelloWorld 之后,则在 if 判断中调用了 init() 函数


4. 总结

调用顺序为 main() -> AppDelegate ->HelloWorld::scene() -> CREATE_FUNC() -> init()

cocos2d 中 scene(), create(), init() 调用关系

标签:cocos2d   c++      create_func   init   

原文地址:http://blog.csdn.net/ironyoung/article/details/39546009

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!