加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2dx创建Class相关宏定义

发布时间:2020-12-14 17:03:26 所属栏目:百科 来源:网络整理
导读:1、 CC_SYNTHESIZE(varType,varName,funName) : 声明一个成员变量以及getfunName,setfunName函数,函数声明和实现都有,如下: CC_SYNTHESIZE(MyDelegate*,delegator,Delegator);//这一步不理解的看下面 //源码: #define CC_SYNTHESIZE(varType,funName)pr

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

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

#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; 
   } 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读