cocos2d-x 3.0 数据结构(3/3) cocos2d::Value
- 于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
之前使用的是CCBool
, CCFloat
, CCDouble
和CCInteger
这样基本类型包装类,不过它们将被废弃掉。
注意:当处理基本类型和和容器时,请使用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
, _mapData
和intKeyMapData
)。
注意: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相关推荐
- 如何制作一个塔防游戏 Cocos2d x 2 0 4
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文实践 ...
- 如何制作一个横版格斗过关游戏 Cocos2d x 2 0 4
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文实践 ...
- 图文并茂使用CocosBuilder制作Cocos2D游戏 分享0
图文并茂使用CocosBuilder制作Cocos2D游戏 分享0 目 录 The Game 设置工程 创建动画类型的主界面 本文由Zynga 工程师原创,翻译:Iven,张作宸,Butterfly ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 回到Xcode中,新建一个EndLayer类,继承于CCNode ...
- 如何制作一个横版格斗过关游戏 2 Cocos2d x 2 0 4
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在第一篇 ...
- 如何制作一个简单的游戏 Cocos2d x 2 0 4
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文实践 ...
- cocos2d-x3.0中数据类型vector,map、value
在3.0中,已经不再使用以前的ccarray,ccdictionary,ccint等从以前的oc继承过来的数据类型,转而加入了自己的数据结构,更加符合c++的开发习惯和思考模式,其中就包括了vecto ...
- Cocos2d x 2 0 从HelloWorld入手
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 从上一篇 ...
- python cocos2d菜鸟教程_(译)cocos2d菜单教程:第一部分
今天,我将带大家一起征服cocos2d的菜单.你不可能会做一个游戏而缺少菜单功能吧?cocos2d使得制作菜单变得非常简单.但是,在我们开始之前,需要确保构建一个系统,它非常容易扩展,以后制作任何游戏 ...
最新文章
- Linux环境ddd安装与使用
- 如何利用大数据进行精准营销
- UA MATH571B 试验设计 QE练习题1
- SharpDeveloeper开发ASP.NET MVC汗流浃背
- mui 组件:“div下拉导航”【scroll固定位置】- 案例篇
- 1000道Python题库系列分享15(1道代码改写题)
- java project 连接hibernate 出错
- include查找文件路径
- django数据模型中关于on_delete的使用
- Remove Duplicates from Sorted List解题报告
- [译] 人人都是设计师。我们可以的。
- MSN退休,寻找微软如何融合MSN的答案:体验skype6国际版MSN功能。
- Ajax的三种写法(最原始的写法+最常用的写法+最简便的写法)
- 日积(Running)月累(ZSSURE):Learning How to Learn,学习习惯
- 三毛的创作姿态与文体选择
- 一台服务器可以干什么
- 2200p如何连接wifi打印_柯尼卡美能达2200P打印机使用介绍
- Aerial for Mac(mac最美的鸟瞰屏幕保护程序)支持big
- FortiGate防火墙配置SSL用户分流
- 关于数学建模的个人见解(实验室专用)