@H_502_1@1、CC_SYNTHESIZE(varType,varName,funName):
@H_502_1@声明一个成员变量以及getfunName,setfunName函数,函数声明和实现都有,如下:
@H_502_1@
@H_502_1@看过源码后,我们把CC_SYNTHESIZE(MyDelegate*,Delegator);带进去试下,实际上与下面这几条代码是同样的意思 @H_502_1@
@H_502_1@2、CC_SYNTHESIZE_PASS_BY_REF(varType,funName): @H_502_1@类似CC_SYNTHESIZE,不过getfunName返回的是引用。 @H_502_1@3、CC_SYNTHESIZE_READONLY(varType,funName): @H_502_1@声明一个成员变量以及getfunName函数,没有set函数。 @H_502_1@getfunName已经实现,其实现就是返回这个值。其实看到READONLY就知道它是只读的了。 @H_502_1@4、CC_SYNTHESIZE_READONLY_PASS_BY_REF(varType,funName): @H_502_1@类似CC_SYNTHESIZE_READONLY,不过getfunName返回的是引用 @H_502_1@5、CC_PROPERTY(varType,funName): @H_502_1@声明一个成员变量以及getfunName,setfunName函数.函数实现要自己做 @H_502_1@举个例子介绍下: @H_502_1@
@H_502_1@6、CC_PROPERTY_PASS_BY_REF(varType,funName):类似CC_PROPERTY,,不过getfunName返回的是引用。 @H_502_1@7、CC_PROPERTY_READONLY(varType,funName):又是一个只读,声明一个成员变量以及getfunName函数,没有set函数。getfunName函数的实现要自己做 @H_502_1@8、CC_PROPERTY_READONLY_PASS_BY_REF(varType,funName):类似CC_PROPERTY_READONLY,不过getfunName返回的是引用。getfunName函数的实现要自己做。 @H_502_1@9、CREATE_FUNC(className) :创建class的create方法:
原文链接:https://www.f2er.com/cocos2dx/339708.htmlCC_SYNTHESIZE(MyDelegate*,delegator,Delegator); //这一步不理解的看下面 //源码: #define CC_SYNTHESIZE(varType,funName) protected: varType varName; public: virtual varType get##funName(void) const { return varName; } public: virtual void set##funName(varType var){ varName = var; }
@H_502_1@看过源码后,我们把CC_SYNTHESIZE(MyDelegate*,Delegator);带进去试下,实际上与下面这几条代码是同样的意思 @H_502_1@
protected: MyDelegate* delegate; public: virtual MyDelegate* getDelegator(void) const { return delegate}; virtual void setDelegator(MyDelegate* dele) { delegate = dele};
@H_502_1@2、CC_SYNTHESIZE_PASS_BY_REF(varType,funName): @H_502_1@类似CC_SYNTHESIZE,不过getfunName返回的是引用。 @H_502_1@3、CC_SYNTHESIZE_READONLY(varType,funName): @H_502_1@声明一个成员变量以及getfunName函数,没有set函数。 @H_502_1@getfunName已经实现,其实现就是返回这个值。其实看到READONLY就知道它是只读的了。 @H_502_1@4、CC_SYNTHESIZE_READONLY_PASS_BY_REF(varType,funName): @H_502_1@类似CC_SYNTHESIZE_READONLY,不过getfunName返回的是引用 @H_502_1@5、CC_PROPERTY(varType,funName): @H_502_1@声明一个成员变量以及getfunName,setfunName函数.函数实现要自己做 @H_502_1@举个例子介绍下: @H_502_1@
//声明 class HelloWorld : public cocos2d::Layer { ... CC_PROPERTY(int,m_hp,Hp); //声明一个类型为int型的成员变量m_hp以及getHp()、setHp(int hp_int)函数 ... } //定义 int HelloWorld::getHp(){ //自己定义实现,看是要return m_hp,或者return m_hp*2; who care? } void HelloWorld::setHp(int hp_int){ //同上,可以是 m_hp = hp_int,或者m_hp = hp_int*2; who care too? }
@H_502_1@6、CC_PROPERTY_PASS_BY_REF(varType,funName):类似CC_PROPERTY,,不过getfunName返回的是引用。 @H_502_1@7、CC_PROPERTY_READONLY(varType,funName):又是一个只读,声明一个成员变量以及getfunName函数,没有set函数。getfunName函数的实现要自己做 @H_502_1@8、CC_PROPERTY_READONLY_PASS_BY_REF(varType,funName):类似CC_PROPERTY_READONLY,不过getfunName返回的是引用。getfunName函数的实现要自己做。 @H_502_1@9、CREATE_FUNC(className) :创建class的create方法:
这里直接贴出这个的宏定义,其主要意思就是先new、new完后是通过init初始化,而不是构造函数。如果init返回false,也就是失败。则释放对象返回NULL。否则,把其加入自动管理的内存池,然后返回该对象的指针。
@H_502_1@
#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; \ } \ }