智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
随笔 - 991, 文章 - 0, 评论 - 27, 阅读 - 341万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

cocos2d-x编程的一些小技巧

Posted on   Bill Yuan  阅读(385)  评论(0编辑  收藏  举报

转自:http://blog.sina.com.cn/s/blog_61d2d3f50100zgz8.html

一.   CC_ASSERT 或 CCAssert宏

Assert - 断言

  使用断言可以创建更稳定,品质更好且不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话,可以使用断言。单元测试必须使用断言。
  除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。

通过使用CC_ASSERT或者CCAssert,我们可以检测代码是否有多用、用错等情况,比如:

// [Test] 每生成一个对象,计数器+1 【判断对象是否不小心创建了多个。】
CCAssert( ++t_gameLayer_GameLayer_Count == 1,  "GameLayer对象生成超过个!" );

// 校验输入的index是否是否超过默认穴位组的大小【5-8个】。【判断输入的index是否超出范围】
CC_ASSERT("参数id超出默认穴位组大小!" && index< MAX_HITPOINT_SIZE && index>=0);

程序运行时突然报错,然后弹出窗口提示“GameLayer对象生成超过个!”,这样我们就知道GameLayer这个对象多创建了,然后就根据vs2008“调用堆栈”窗口,看看代码的执行顺序,就可以知道代码是哪里写错了,进而改正,让代码更加健壮。

两个宏的用法差不多,看看源代码就懂了,实际上它们就是同一个东西啦。

复制代码
#ifndef CCAssert
#define CCAssert(cond, msg)         CC_ASSERT( msg && cond)
#endif  // CCAssert

#ifdef _DEBUG
#define CC_ASSERT(cond)  (void)( (!!(cond)) || (badaAssert(__PRETTY_FUNCTION__ , __LINE__ , #cond),0) )
#else
#define CC_ASSERT(cond)  void(0)
#endif
#endif
复制代码

二.CCNS.h

最近在看cocos2d-x的源代码,发现CCNS.h这个类有几个函数挺实用的,简单翻译一下。

复制代码
/ *
    @描述: 根据给定的字符串格式,返回一个CCRect对象。
@参数:
pszContent:一个格式为:"{{x,y},{w, h}}"的字符串。 x:x轴;y:y轴;w:宽;h:高。
取值可以是int或者float型。
例子:"{{3,2},{4,5}}"。
@返回:如果参数的格式不正确,则返回CCRectZero。
* /
    CCRect CC_DLL CCRectFromString(const char* pszContent);
/ *
@描述:根据给定的字符串格式,返回一个CCpoint对象。
@参数:
pszContent:  一个格式为:"{x,y}"的字符串。x:x轴;y:y轴。
取值可以是int或者float型。
                  例子:"{3.0,2.5}"。
 @返回:如果参数的格式不正确,则返回CCPointZero。
* /
       CCPoint CC_DLL CCPointFromString(const char* pszContent);
/ *
    @描述:根据给定的字符串格式,返回一个CCSize对象。
@参数:
pszContent:一个格式为:"{w,h}"的字符串。w:宽度;h:高度。
取值可以是int或者float型。
例子:"{3.0,2.5}"。
@返回:如果参数的格式不正确,则返回CCSizeZero。
* /
       CCSize CC_DLL CCSizeFromString(const char* pszContent);
复制代码

用法:

CCPoint tPosition = CCPointFromString("{0,12}");

如果CCRect、CCPoint或CCSize是通过外部文件(xml,ini)加载的话,这几个函数就很实用了。

(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示