coco2dx 中常用的宏定义

来源:互联网 发布:java snmp4j get超时 编辑:程序博客网 时间:2024/06/05 20:45

 

CCAssert(cond ,msg);

断言表达式cond为真 ,如果cond不为真的话就打印msg的信息

遍历Array Dictionary 的宏

// 可以通过源代码分析到这个宏的意思就是遍历Array

#define CCARRAY_FOREACH(__array__, __object__)                                                                         \    if ((__array__) && (__array__)->data->num > 0)                                                                     \    for(Ref** __arr__ = (__array__)->data->arr, **__end__ = (__array__)->data->arr + (__array__)->data->num-1;    \    __arr__ <= __end__ && (((__object__) = *__arr__) != NULL/* || true*/);                                             \    __arr__++)

// 这个是逆序遍历

#define CCARRAY_FOREACH_REVERSE(__array__, __object__)                                                                  \    if ((__array__) && (__array__)->data->num > 0)                                                                      \    for(Ref** __arr__ = (__array__)->data->arr + (__array__)->data->num-1, **__end__ = (__array__)->data->arr;     \    __arr__ >= __end__ && (((__object__) = *__arr__) != NULL/* || true*/);                                              \    __arr__--)

//具体的使用如下但是还需对得到的元素进行强制转换
CCArray* _array;  CCObject* _object;     // 用来遍历数组的临时变量  CCARRAY_FOREACH(_array, _object) // 正向遍历  {      CCSprite* _bullet = (CCSprite*)_object;      // todo with _bullet....    }  
<span><span class="comment">//遍历一个array 并且使其中的元素执行方法</span></span>#define arrayMakeObjectsPerformSelector(pArray, func, elementType)    \do {                                                                  \    if(pArray && pArray->count() > 0)                                 \    {                                                                 \        Ref* child;                                                \        CCARRAY_FOREACH(pArray, child)                                \        {                                                             \            elementType pNode = static_cast<elementType>(child);      \            if(pNode)                                                 \            {                                                         \                pNode->func();                                        \            }                                                         \        }                                                             \    }                                                                 \}                                                                     \while(false)

//遍历array 并且执行一个传参数的方法
#define arrayMakeObjectsPerformSelectorWithObject(pArray, func, object, elementType)   \do {                                                                  \    if(pArray && pArray->count() > 0)                                 \    {                                                                 \        Ref* child;                                                \        CCARRAY_FOREACH(pArray, child)                                \        {                                                             \            elementType pNode = static_cast<elementType>(child);      \            if(pNode)                                                 \            {                                                         \                pNode->func(object);                                 \            }                                                         \        }                                                             \    }                                                                 \}                                                                     \while(false)



 // 命名空间的预定义宏 #define NS_CC_BEGIN                     namespace cocos2d { #define NS_CC_END                       } #define USING_NS_CC                     using namespace cocos2d #define NS_CC                           ::cocos2d


#define NODE_FUNC(__TYPE__) \CC_DEPRECATED_ATTRIBUTE static __TYPE__* node() \{ \    __TYPE__ *pRet = new __TYPE__(); \    if (pRet && pRet->init()) \    { \        pRet->autorelease(); \        return pRet; \    } \    else \    { \        delete pRet; \        pRet = NULL; \        return NULL; \    } \}



<pre name="code" class="cpp">//在创建的工程目录下的helloworld的头文件可以看到使用先
//分配一个空间再使用其调用的初始化方法 
//自动生成一个默认的create 方法
</pre>#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; \    } \}

<pre name="code" class="cpp">//还有关于安全删除对象的宏,一般来说删除对象,需要判断是否为空
//再执行赋值为空的代码
</pre>#define CC_SAFE_DELETE(p)           do { delete (p); (p) = nullptr; } while(0)#define CC_SAFE_DELETE_ARRAY(p)     do { if(p) { delete[] (p); (p) = nullptr; } } while(0)#define CC_SAFE_FREE(p)             do { if(p) { free(p); (p) = nullptr; } } while(0)#define CC_SAFE_RELEASE(p)          do { if(p) { (p)->release(); } } while(0)#define CC_SAFE_RELEASE_NULL(p)     do { if(p) { (p)->release(); (p) = nullptr; } } while(0)#define CC_SAFE_RETAIN(p)           do { if(p) { (p)->retain(); } } while(0)#define CC_BREAK_IF(cond)           if(cond) break
<pre name="code" class="cpp">//下面是cocos2d中独有的while(0)循环当初看到这个while(0)
//我还真不是清楚为什么要写这个while(0)相当于 if(<<<<) return

bool Class::init() { bool bRet = false; do { // do some initialization 1 CC_BREAK_IF(cond); // 当表达式cond为真时候跳出。 // do some more initialization bRet = true; } while(0); return bRet; }

//生成一个-1到1之间的随机数
#define CCRANDOM_MINUS1_1()
//生成一个0到1的随机数
#define CCRANDOM_0_1()
//角度转弧度的
#define CC_DEGREES_TO_RSDISNS(_angle_)

//弧度转角度
#define CC_RADIANS_TO_DEGREES(_ANGLE_)

关于cocos2d中使用最多的Point 的一些操作

ccpFromSize(s) //以size s 的width为x,height 为y 创建向量
ccpAdd(v1,v2) //相加
ccpSUb(v1,v2)
ccpNeg(v)
ccpMult(v,s) //等价于ccp(v.x*s ,v.y*s)
ccpMidpoint(v1,v2) //求点1和点2的中点
CCPDo(v1,v2) //求点乘
ccpCross(v1,v2) //求叉乘
ccpProject(v1,v2) //返回在向量1在向量2上的投影向量
ccpLength(v) //返回向量v的长度 即点v到原点的距离
ccpLengthSQ(v) //返回向量的长度的平方
ccpDistance(v1,v2) //返回v1 v2距离的
ccpDistanceSQ(v1,v2) //返回平方
ccpNormalize(v) //返回v的标准话向量即长度为1
ccpRotate(v1,v2) //向量v1向量v1旋转过向量v2的角度并且乘上向量v2的长度。当v2是一个长度为1的标准向量时就是正常的旋转了,可以配套地用ccpForAngle 
ccPerp(v) //等价于逆时针旋转90度
ccpRPerp(v) //顺时针旋转



0 0
原创粉丝点击