1、CC_SYNTHESIZE(varType,varName,funName):
声明一个成员变量以及getfunName,setfunName函数,函数声明和实现都有,如下:
- CC_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; }
看过源码后,我们把CC_SYNTHESIZE(MyDelegate*,Delegator);带进去试下,实际上与下面这几条代码是同样的意思
- protected:
- MyDelegate* delegate;
- public:
- virtual MyDelegate* getDelegator(void) const { return delegate};
- virtual void setDelegator(MyDelegate* dele) { delegate = dele};
2、CC_SYNTHESIZE_PASS_BY_REF(varType,funName):
类似CC_SYNTHESIZE,不过getfunName返回的是引用。
3、CC_SYNTHESIZE_READONLY(varType,funName):
声明一个成员变量以及getfunName函数,没有set函数。
getfunName已经实现,其实现就是返回这个值。其实看到READONLY就知道它是只读的了。
4、CC_SYNTHESIZE_READONLY_PASS_BY_REF(varType,funName):
类似CC_SYNTHESIZE_READONLY,不过getfunName返回的是引用
5、CC_PROPERTY(varType,funName):
声明一个成员变量以及getfunName,setfunName函数.函数实现要自己做
举个例子介绍下:
- //声明
- 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?
- }
6、CC_PROPERTY_PASS_BY_REF(varType,funName):类似CC_PROPERTY,,不过getfunName返回的是引用。
7、CC_PROPERTY_READONLY(varType,funName):又是一个只读,声明一个成员变量以及getfunName函数,没有set函数。getfunName函数的实现要自己做
8、CC_PROPERTY_READONLY_PASS_BY_REF(varType,funName):类似CC_PROPERTY_READONLY,不过getfunName返回的是引用。getfunName函数的实现要自己做。
9、CREATE_FUNC(className) :创建class的create方法:
- #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; \
- } \
- }