• 于v3.0beta加入

定义在"COCOS2DX_ROOT/cocos/base"的头文件"CCValue.h"中

class Value;

cocos2d::Value是许多基本类型(int,float,double,bool,unsigned char,char*std::string)还有std::vector<Value>std::unordered_map<std::string,Value>std::unordered_map<int,Value>这些类的包装类型。

你可以将上面提及的基本类放进cocos2d::Value对象将它们转换成对应的类型,反之亦然。

cocos2d::Value底层用一个统一的变量来保存任意基本类型值,它将更加节省内存。在cocos2d-x v3.0beta之前使用的是CCBoolCCFloatCCDoubleCCInteger这样基本类型包装类,不过它们将被废弃掉。

注意:当处理基本类型和和容器时,请使用cocos2d::Vector<T>cocos2d::Map<K,V>cocos2d::Value

内存管理

cocos2d::Value的内存由它的析构函数来释放,所以使用cocos2d::Value时请尽量用推荐的最佳做法。

cocos2d::Value包含下面的数据成员:

union
{unsigned char byteVal;int intVal;float floatVal;double doubleVal;bool boolVal;
}_baseData;std::string _strData;
ValueVector* _vectorData;
ValueMap* _mapData;
ValueMapIntKey* _intKeyMapData;Type _type;

代码段中,_baseData_strData_type是由编译器和它们的析构函数负责释放内存的,而cocos2d::Value的析构函数则负责释放指针成员(_vectorData_mapDataintKeyMapData)。

注意:cocos2d::Value不能像其它cocos2d类型一样使用retain/release和refcount内存管理

基本用法

ocos2d::Value的用法非常简单直接。
下面就是使用的例子:

Value val;   // call the default constructor
if (val.isNull()) {log("val is null");
}else{std::string str =val.getDescription();log("The description of val0:%s",str.c_str());
}
//----------------------------------------------------
Value val1(65);   // initialize with a integer
//Value val1(3.4f);   // initialize with a float value
//Value val1(3.5);   // initialize with a double value
log("The description of the integer value:%s",val1.getDescription().c_str());
log("val1.asByte() = %c",val1.asByte());
//----------------------------------------------------
std::string strV = "string";
Value val2(strV);   // initialize with string
log("The description of the string value:%s",val2.getDescription().c_str());
//----------------------------------------------------
auto sp0 = Sprite::create();
Vector<Object*>* vecV = new Vector<Object*>();
vecV->pushBack(sp0);
Value val3(vecV);   // initialize with Vector
log("The description of the Vector value:%s",val3.getDescription().c_str());
delete vecV;
//----------------------------------------------------
Map<std::string, Object*>* mapV = new Map<std::string, Object*>();
mapV->insert(strV,sp0);
Value val4(mapV);   // initialize with Map
log("The description of the Map value:%s",val4.getDescription().c_str());
delete mapV;
//----------------------------------------------------
Value val6(&val4);   // initialize with Map
log("The description of the Value-type value:%s",val6.getDescription().c_str());
//----------------------------------------------------
val2 = val1;   // assigning between 2 Value-type
log("operator-> The description of val2:%s",val2.getDescription().c_str());
val2 = 4;   //assigning directly
log("operator-> The description of val4:%s",val2.getDescription().c_str());

结果是:

cocos2d: val is null
cocos2d: The description of the integer value:
65cocos2d: val1.asByte() = A
cocos2d: The description of the string value:
stringcocos2d: The description of the Vector value:
truecocos2d: The description of the Map value:
truecocos2d: The description of the Value-type value:
truecocos2d: operator-> The description of val2:
65cocos2d: operator-> The description of val4:
4

最佳用法

  • 考虑使用cocos2d::Value和新的模版容器(cocos2d::Vector和cocos2d::Map)优于使用cocos2d::CCBool, cocos2d::CCFloat,cocos2d::CCDouble,cocos2d::CCString,cocos2d::CCInteger和旧的objective-c风格的容器(cocos2d::CCArray和cocos2d::CCDictionary)。
  • 当要使用基本类型的聚合时,将基本类型包装成cocos2d::Value,然后将它们和模版容器cocos2d::Vector和cocos2d::Map联合使用。

cocos2d-x 3.0 数据结构(3/3) cocos2d::Value相关推荐

  1. 如何制作一个塔防游戏 Cocos2d x 2 0 4

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文实践 ...

  2. 如何制作一个横版格斗过关游戏 Cocos2d x 2 0 4

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文实践 ...

  3. 图文并茂使用CocosBuilder制作Cocos2D游戏 分享0

    图文并茂使用CocosBuilder制作Cocos2D游戏  分享0 目 录 The Game 设置工程 创建动画类型的主界面 本文由Zynga 工程师原创,翻译:Iven,张作宸,Butterfly ...

  4. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 回到Xcode中,新建一个EndLayer类,继承于CCNode ...

  5. 如何制作一个横版格斗过关游戏 2 Cocos2d x 2 0 4

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在第一篇 ...

  6. 如何制作一个简单的游戏 Cocos2d x 2 0 4

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文实践 ...

  7. cocos2d-x3.0中数据类型vector,map、value

    在3.0中,已经不再使用以前的ccarray,ccdictionary,ccint等从以前的oc继承过来的数据类型,转而加入了自己的数据结构,更加符合c++的开发习惯和思考模式,其中就包括了vecto ...

  8. Cocos2d x 2 0 从HelloWorld入手

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 从上一篇 ...

  9. python cocos2d菜鸟教程_(译)cocos2d菜单教程:第一部分

    今天,我将带大家一起征服cocos2d的菜单.你不可能会做一个游戏而缺少菜单功能吧?cocos2d使得制作菜单变得非常简单.但是,在我们开始之前,需要确保构建一个系统,它非常容易扩展,以后制作任何游戏 ...

最新文章

  1. Linux环境ddd安装与使用
  2. 如何利用大数据进行精准营销
  3. UA MATH571B 试验设计 QE练习题1
  4. SharpDeveloeper开发ASP.NET MVC汗流浃背
  5. mui 组件:“div下拉导航”【scroll固定位置】- 案例篇
  6. 1000道Python题库系列分享15(1道代码改写题)
  7. java project 连接hibernate 出错
  8. include查找文件路径
  9. django数据模型中关于on_delete的使用
  10. Remove Duplicates from Sorted List解题报告
  11. [译] 人人都是设计师。我们可以的。
  12. MSN退休,寻找微软如何融合MSN的答案:体验skype6国际版MSN功能。
  13. Ajax的三种写法(最原始的写法+最常用的写法+最简便的写法)
  14. 日积(Running)月累(ZSSURE):Learning How to Learn,学习习惯
  15. 三毛的创作姿态与文体选择
  16. 一台服务器可以干什么
  17. 2200p如何连接wifi打印_柯尼卡美能达2200P打印机使用介绍
  18. Aerial for Mac(mac最美的鸟瞰屏幕保护程序)支持big
  19. FortiGate防火墙配置SSL用户分流
  20. 关于数学建模的个人见解(实验室专用)

热门文章

  1. 【unity】关于枪口瞄准的趣事
  2. python小游戏开发——简单弹球游戏
  3. 铝/石墨烯复合材料结晶过程lammps模拟
  4. JAVA计算机毕业设计邢台市公寓式月亮酒店管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  5. 商用厨房该如何挑选合适自己的油烟净化器?
  6. NC45 实现二叉树先序,中序和后序遍历
  7. 如何用C语言写出一个微信群聊机器人
  8. 业务分析模型,该怎么搭建
  9. 分类,目标检测,语义分割,实例分割
  10. php什么是api,php – 什么是API令牌?