1、CC_SYNTHESIZE(varType, varName, funName):
声明一个成员变量以及getfunName,setfunName函数,函数声明和实现都有,如下:
1
2
3
4
5
6
7
8
|
CC_SYNTHESIZE(MyDelegate*,delegator,Delegator); //这一步不理解的看下面
//源码:
#define
CC_SYNTHESIZE(varType, varName, 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,Delegator);带进去试下,实际上与下面这几条代码是同样的意思。
1
2
3
4
5
|
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, varName, funName):
类似CC_SYNTHESIZE,不过getfunName返回的是引用。
3、CC_SYNTHESIZE_READONLY(varType, varName, funName):
声明一个成员变量以及getfunName函数,没有set函数。
getfunName已经实现,其实现就是返回这个值。其实看到READONLY就知道它是只读的了。
4、CC_SYNTHESIZE_READONLY_PASS_BY_REF(varType, varName, funName):
类似CC_SYNTHESIZE_READONLY,不过getfunName返回的是引用
5、CC_PROPERTY(varType, varName, funName):
声明一个成员变量以及getfunName,setfunName函数.函数实现要自己做
举个例子介绍下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//声明
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, varName, funName):类似CC_PROPERTY,,不过getfunName返回的是引用。
7、CC_PROPERTY_READONLY(varType, varName, funName):又是一个只读,声明一个成员变量以及getfunName函数,没有set函数。getfunName函数的实现要自己做
8、CC_PROPERTY_READONLY_PASS_BY_REF(varType, varName, funName):类似CC_PROPERTY_READONLY,不过getfunName返回的是引用。getfunName函数的实现要自己做