谁能解释一下为什么我们需要在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)吗?
不,你不知道。你要做的就是调用超类之一init…
方法。这最好由您的构造函数或您的构造函数来完成init()
在子类中。
编辑2:
评论中的第二个问题:再补充一点,在Cocos2dx的HelloWorld示例中,为什么需要手动调用CREATE_FUNCTION呢?不需要,但在使用 cocos 时使用它们的宏可能被认为是“好的实践”,因为当它们改变了create()
新版本中宏实现的功能只需要更新一处——宏定义。这使得出错的空间更小,因为几乎没有机会“忘记”将代码更改为新版本的位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)