Cocos2dx创建Class相关宏定义

前端之家收集整理的这篇文章主要介绍了Cocos2dx创建Class相关宏定义前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、CC_SYNTHESIZE(varType,varName,funName)

声明一个成员变量以及getfunName,setfunName函数函数声明和实现都有,如下:

  1. CC_SYNTHESIZE(MyDelegate*,delegator,Delegator);
  2. //这一步不理解的看下面
  3. //源码:
  4. #define CC_SYNTHESIZE(varType,funName)
  5. protected: varType varName;
  6. public: virtual varType get##funName(void) const { return varName; }
  7. public: virtual void set##funName(varType var){ varName = var; }

看过源码后,我们把CC_SYNTHESIZE(MyDelegate*,Delegator);带进去试下,实际上与下面这几条代码是同样的意思

  1. protected:
  2.   MyDelegate* delegate;
  3. public:
  4.   virtual MyDelegate* getDelegator(void) const { return delegate};
  5.   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函数.函数实现要自己做

举个例子介绍下:

  1. //声明
  2. class HelloWorld : public cocos2d::Layer {
  3.  ...
  4.  CC_PROPERTY(int,m_hp,Hp);
  5.   //声明一个类型为int型的成员变量m_hp以及getHp()、setHp(int hp_int)函数
  6. ...
  7. }
  8. //定义
  9. int HelloWorld::getHp(){
  10. //自己定义实现,看是要return m_hp,或者return m_hp*2; who care?
  11. }
  12. void HelloWorld::setHp(int hp_int){
  13. //同上,可以是 m_hp = hp_int,或者m_hp = hp_int*2; who care too?
  14. }

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方法

这里直接贴出这个的宏定义,其主要意思就是先new、new完后是通过init初始化,而不是构造函数。如果init返回false,也就是失败。则释放对象返回NULL。否则,把其加入自动管理的内存池,然后返回该对象的指针。

  1. #define CREATE_FUNC(__TYPE__) \
  2. static __TYPE__* create() \
  3. { \
  4. __TYPE__ *pRet = new __TYPE__(); \
  5. if (pRet && pRet->init()) \
  6. { \
  7. pRet->autorelease(); \
  8. return pRet; \
  9. } \
  10. else \
  11. { \
  12. delete pRet; \
  13. pRet = NULL; \
  14. return NULL; \
  15. } \
  16. }

猜你在找的Cocos2d-x相关文章