JSON

【COCOS2D-X(1.X 2.X)】Json(cpp版)以及添加自定义字体库教程

字号+ 作者:H5之家 来源:H5之家 2017-03-23 17:02 我要评论( )

【COCOS2D-X(1.X 2.X)】Json(cpp版)以及添加自定义字体库教程,本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自【黑米Ga

正文

本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi)
转载自【黑米GameDev街区】 原文链接:


点击订阅
本博客最新动态!及时将最新博文通知您!

不知道改先说些什么,又是一个好久没写博客的阶段了啊~(很多童鞋也应该发现Himi隐匿了…)

最近一段时间呢,主要还是太忙,各种忙。对于博客,Himi自己的还是经常关注的,主要没有什么可写的了,哈哈。不过一旦有可以分享的,一定第一时间发出来~

好了 不闲扯了,今天来给童鞋们介绍如何在Cocos2dx中解析、封装JSON数据的教学。

首先了JSON相关知识:

1JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-2623rdEdition -December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

JSON 官网地址:

常用的几个版本包括C, C++, C#, Java, JavaScript, Perl, Python等

那么针对cocos2dx 我们应该使用c++的版本~

第一步: 下载cpp版本的json


(Himi 微盘)

第二步: 解压文件夹放置项目中即可使用

1导入头文件: #include "jsoncpp/include/json/json.h"

第三步:常用示例

3.1 先熟悉几个类名和函数:

123456789101112131415161718192021222324/*Value:写过脚本、弱语言的童鞋应该很清楚var,其他Value 和var一个道理,都是可以表示很多数据类型的数据类型,。这话可能比较绕,简单说就是Value你可以理解可以是int 也可以是string 也可以是其他数据类型。当然定义 Value value,只是个定义,还没有决定其数据类型,如果你Value value =10;那么value 就是个整型在用于JSON时,我们常表示为一个map,其中包括 key-value,键值对其中Value 中包括一些将其转为基础数据类型的6个方法,如下:value.asCString();value.asString();value.asBool();value.asDouble();value.asInt();value.asUInt();*/Json::FastWriter write;/*FastWriter:起作用是将Value数据编码成JSON格式的数据常用函数:write(<#const Json::Value &root#>)*/Json::Reader reader;/*Value:作用与FastWriter相反,是将JSON格式的数据解析成一个Value常用函数: reader.parse(<#std::istream &is#>, <#Json::Value &root#>)*/

以上是常用的类和函数已经注释说明的很清楚了,那么下面我们开始进行制作JSON数据、解析JSON数据等操作吧:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263//创建JSON数据//------先定义数据Json::Value map;map["name"]="Himi";map["age"]=23;//------编码成json数据string jsonData =write.write(map);CCLOG("jsonData:%s",jsonData.c_str());//打印结果 Cocos2d: jsonData:{"age":23,"name":"Himi"}//解析JSON数据//--先将数据解析到 Value(parseData)中Json::Value parseData;reader.parse(jsonData, parseData);Json::Value valueName = "默认";Json::Value valueAge = -1;valueName = parseData.get("name", valueName);valueAge = parseData.get("age", valueAge);constchar* nameStr =valueName.asCString() ;intage = valueAge.asInt();CCLOG("name:%s,age:%d",nameStr,age);//打印结果:Cocos2d: name:Himi,age:23//使用get函数时,第一个参数是key的名, 第二个参数是如果找不到对应key的默认Value//举例我们将name和age,故意写错:// Json::Value parseData;// reader.parse(jsonData, parseData);// // Json::Value valueName = "默认";// Json::Value valueAge = -1;// valueName = parseData.get("nameHimi", valueName);// valueAge = parseData.get("ageHimi", valueAge);// // const char* nameStr =valueName.asCString() ;// int age = valueAge.asInt();// CCLOG("name:%s,age:%d",nameStr,age);//打印结果:Cocos2d: name:默认,age:-1//复杂一点JSON的编写和解析Json::Value root;Json::Value array;array["arrKey1"]="arrValue1";array["arrKey2"]="arrValue2";array["arrKey3"]="arrValue3";root["arrayKey"] =array;string hJsonData = write.write(root);CCLOG("复杂一点的JSON格式数据:%s",hJsonData.c_str());//打印结果 Cocos2d: 复杂一点的JSON格式数据:{"arrayKey":{"arrKey1":"arrValue1","arrKey2":"arrValue2","arrKey3":"arrValue3"}}Json::Value parseRoot;Json::Value parseArray;reader.parse(hJsonData, parseRoot);parseArray = parseRoot.get("arrayKey", parseArray);CCLOG("解析出的数据:%s,%s,%s",parseArray.get("arrKey1",NULL).asCString(),parseArray.get("arrKey2",NULL).asCString(),parseArray.get("arrKey3",NULL).asCString());//打印结果:Cocos2d: 解析出的数据:arrValue1,arrValue2,arrValue3

整体来说JSON CPP 还是很非常好用的,就不多扯了~ 再复杂的数据只要会了如上,基本就全OK;

需要注意的两点:

1. 使用Value的get函数时,如果你传入第二个参数(默认Value),那么一定要将获得的结果赋值给第二个参数,防止get函数找到对应Key时,Value没人要的问题发生。如下:

Json::Value value;

value = xx .get(“key”,value);

当然你很确定key,你也可以:

Value value = xx .get(“key”,NULL);

2.使用get获取的value,一定要注意其数据类型,不要获取的是个整型,还要使用asCString()函数转换。

下面我们来学习如何添加新字体库:

步骤一:找一个ttf字体库

步骤二:找到这个ttf字体库的真实名称

打开你的应用 “字体册”(MAC OS系统下),如下图操作):




 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评