谁能解释我为什么需要在Cocos2dx中使用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(std::nothrow) __TYPE__();
    if (pRet && pRet->init())
    {
        pRet->autorelease();
        return pRet;
    }
    else
    {
        delete pRet;
        pRet = NULL;
        return NULL;
    }
}

基本上,它会为您的类型“写入” create()方法,并调用init()实现。它的主要目的是调用autorelease()方法,这样,如果您要编写自己的create(),就不会忘记它。它可能看起来不多,但需要花费您一些时间。

提示:在大多数IDE中,您可以在函数和宏之类的代码段上添加Control + Click(MAC上的命令),IDE会将您带到它。

让我知道是否仍然不清楚。

编辑 :
来自注释的问题:具体来说,如果我想编写一个从CCSprite扩展而来的CCCarSprite,并具有更多运行,崩溃等功能,是否需要调用CREATE_FUNCTION(CCCarSprite)?

不,你没有。您要做的是调用父类(super class)init…方法之一。最好从构造函数或子类中的init()完成。

编辑2:
评论中的第二个问题:再说一遍,在Cocos2dx的HelloWorld示例中,为什么他们需要手动调用CREATE_FUNCTION?
不需要,但是当与cocos一起使用它们的宏时,它可能被认为是“好的做法”,因为当他们可以在新版本的宏中实现的create()函数中进行某些操作时,只需要将其更新到一个位置-宏定义。这几乎没有错误的余地,因为几乎没有机会“忘记”将代码更改为新版本的地方。

09-25 20:08