在Cocos2dx中使用CREATE_FUNC

lol*_*shi 5 cocos2d-x

任何人都可以解释我为什么需要在Cocos2dx中使用CREATE_FUNC?我在HelloWorld示例中看到了它并且不清楚它.请告诉我更多细节.谢谢.

Los*_*aty 15

我们不需要使用它,它是一个帮助宏,它扩展到这个:

/**
 * 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(std::nothrow) __TYPE__();
    if (pRet && pRet->init())
    {
        pRet->autorelease();
        return pRet;
    }
    else
    {
        delete pRet;
        pRet = NULL;
        return NULL;
    }
}
Run Code Online (Sandbox Code Playgroud)

它基本上create()为您的类型"写" 方法,并调用您的init()实现.它的主要目的是调用autorelease()方法,这样你就不会忘记它,如果你自己编写的话create().它可能看起来不多,但它需要你一点点.

提示:在大多数IDE中,您可以Control + Click(在MAC上执行命令)对函数和宏等代码进行操作,IDE将带您进入.

如果有些事情仍然不清楚,请告诉我.

编辑:来自评论的问题:具体来说,如果我想编写一个CCCarSprite,它扩展自CCSprite并具有更多功能,如run,crash ......我是否需要调用CREATE_FUNCTION(CCCarSprite)?

不,你没有.你要做的是调用一个超类init…方法.这最好从您的构造函数或您init()的子类中完成.

编辑2:评论中的第二个问题:在Cocos2dx的HelloWorld示例中,为什么还需要手动调用CREATE_FUNCTION? 不需要,但在使用cocos来使用它们的宏时,它可能被认为是"良好实践",因为当它们create()在新版本中的宏实现的功能中装入某些东西时,它们只需要在一个地方更新它 -宏定义.这样可以减少出错的空间,因为几乎没有机会"忘记"将代码更改为新版本的地方.