谁能解释我为什么需要在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()
函数中进行某些操作时,只需要将其更新到一个位置-宏定义。这几乎没有错误的余地,因为几乎没有机会“忘记”将代码更改为新版本的地方。