coco2dx 中常用的宏定义

 

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) //顺时针旋转



 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值