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
- coco2dx 中常用的宏定义
- coco2dx中,创建精灵的各种方法
- coco2dx中基础的数据存储
- C语言中常用的宏定义
- 成熟软件中常用的宏定义
- DirectX中常用的宏定义
- IOS开发中常用的宏定义
- 个人代码中常用的宏定义
- iOS 开发中常用的宏定义
- iOS开发中常用的宏定义
- coco2dx 常用页面汇总
- coco2dx中使用jsoncpp
- 常用的宏定义
- 常用的宏定义
- 常用的宏定义
- 常用的宏定义
- 常用的宏定义
- 常用的宏定义
- 七、Redis 基础命令---任务队列
- Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based!
- Nginx、Lighttpd与Apache的区别
- uva1388(数学)
- dp小结
- coco2dx 中常用的宏定义
- android SparseArray替代HashMap的分析
- Codeforces Round #287 (Div. 2) A B C
- git设置ssh key
- C++11 中的线程、锁和条件变量
- 解剖Nginx·模块开发篇(1)跑起你的 Hello World 模块!
- 八、Redis 基础命令---管理--持久化--RDB
- 交换两个变量的值
- C++11 中值得关注的几大变化(详解)