cocos2d 中 scene(), create(), 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()

时间: 2024-10-09 15:55:42

cocos2d 中 scene(), create(), init() 调用关系的相关文章

cocos2d 中使用jni C++ 调用 Java 方法

1.简单数据类型例子 假设我们Java中有这么一个open的静态方法,它没有参数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class CbCCBLECentralManager { public static final String TAG = "CbCCBLECentralManager Android"; public static int open() { Log.d(TAG,"open"); r

cocos2d 中使用jni Java 调用 C++ 方法

1.首先是LoadLibrary cocos2d中的C++代码会编译成一个.so文件,放在安卓目录下的libs/armeabi 下,然后java会load进来,这步我们不用做了,因为cocos2d已经帮我们做好了. package cb.CbCCBLE; public class CbCCBLECentralManager { public static final String TAG = "CbCCBLECentralManager Android"; public native

[tty与uart]1.Linux中tty框架与uart框架之间的调用关系剖析

转自:http://developer.51cto.com/art/201209/357501_all.htm 目录 在这期间有一个问题困扰着我,那就是来自用户空间的针对uart设备的操作意图是如何通过tty框架逐层调用到uart层的core驱动,进而又是如何调用到真实对应于设备的设备驱动的,本文中的对应设备驱动就是8250驱动,最近我想将这方面的内容搞清楚. 在说明这一方面问题之前我们先要大致了解两个基本的框架结构,tty框架和uart框架. 1.tty框架 在linux系统中,tty表示各种

jquery 中多个存在依赖关系的ajax调用解决办法

在使用ajax异步调用的时候,可能碰到同时调用多个ajax这种情况.而且多个ajax之间还存在依赖关系.这种情况怎么处理呢?   有两种办法: 一种是多个ajax嵌套调用,这时需要设置async为false,也就是便成同步的了,但是这种方法存在一个弊端,如果后台出现问题,一直忙,不能返回数据,浏览器将出现卡死的情况.   第二种方法是使用队列的方法.将ajax加入到队列中,然后依次调用即可. 这里举个例子. index.html<!DOCTYPE html> <html> <

Linux中tty框架与uart框架之间的调用关系剖析【转】

转自:http://developer.51cto.com/art/201209/357501.htm 之前本人在"从串口驱动的移植看linux2.6内核中的驱动模型 platform device & platform driver"一文中已经写到了移植的设备是如何通过platform总线来与对应的驱动挂载. 在这期间有一个问题困扰着我,那就是来自用户空间的针对uart设备的操作意图是如何通过tty框架逐层调用到uart层的core驱动,进而又是如何调用到真实对应于设备的设备

cocos2d中分步实现飞机大战----游戏场景中背景的滚动

上一节说了场景的跳转,现在开始布置游戏游戏界面.在游戏的主界面,首先要有游戏背景,为了使GameScene的代码不至于太多,可以吧自己的背景进行封装,在GameScene中调用就好,飞机的正常飞行移动可以用北京的移动来实现.创建BackGround: background.h: #include "cocos2d.h" USING_NS_CC; class background:public Node{ public: CREATE_FUNC(background); bool ini

Cocos2d中CCScrollView和CCTableView使用

在游戏和应用中经常要实现左右滑动展示游戏帮助.以列表显示内容的UI效果,就像android中的Gallery和ListView.本文通过CCScrollView和CCTableView分别来实现这两个效果,基于cocos2d-x 2.0.4版本. 首先来简单了解一下这两个东东,CCScrollView本身是一个CCLayer,而CCTableView是CCScrollView的子类,这是引擎已经帮我们封装好了的,CCTableView可以设置成横向和纵向,用它可以实现类似于Gallery和Lis

cocos2d 中加入显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)

在 cocos2d 中有三个类能够在层或精灵中加入文字: CCLabelTTF CCLabelBMFont CCLabelAtlas      CCLabelTTF CCLabelTTF 每次调用 setString (即改变文字)的时候,一个新的OPENGL 纹理将会被创建..这意味着setString 和创建一个新的标签一样慢. 所以,当你须要频繁的更新它们的时候,尽可能的不用去使用标签对象.  而应该使用CCLabelAtlas或者是CCLabelBMFont. OK, 看下它的用法 CC

转iOS中delegate、protocol的关系

iOS中delegate.protocol的关系 分类: iOS Development2014-02-12 10:47 277人阅读 评论(0) 收藏 举报 delegateiosprocotolcategoryobject-c 刚开始接触iOS,对delegate.protocol这两个概念比较模糊.参考了一些资料,记录下来体会. 1.protocol protocol和interface的概念类似,是object-c语法的一部分.protocol就是一系列不属于任何类的方法的列表.其中声明