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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

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

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

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

首先了JSON相关知识:

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

JSON 官网地址: http://json.org

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

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

第一步: 下载cpp版本的json


http://vdisk.weibo.com/s/yZxRoLm4SZZDD (Himi 微盘)

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

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

第三步:常用示例

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
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数据等操作吧:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//创建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);
const char * nameStr =valueName.asCString() ;
int age = 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系统下),如下图操作):

asdf

找到了字体库真实名称,那么修改将其真名作为为此新的字体库名称即可。

然后将其加入你的项目中即可使用

步骤三:

打开Xcode项目资源下的info.plist文件:

然后右键 “Add Row”,添加“Fonts provided by application ”条目,如下图:

(将新加的字体库真名加入此条目列表下即可)

QQ20131108-5

剩下,我们书写测试代码:

1
2
3
4
5
6
7
8
9
10
//使用系统自带字体库
CCLabelTTF* pLabel = CCLabelTTF::create( "自带字体库" "Thonburi" , 50);
CCSize size = CCDirector::sharedDirector()->getWinSize();
pLabel->setPosition( ccp(size.width / 2, size.height*0.5 + 30) );
this ->addChild(pLabel, 1);
//使用新加的字体库
CCLabelTTF* pLabelHimi = CCLabelTTF::create( "Himi 新加字体库" "DFKanTingLiuW9.ttf" , 50);
pLabelHimi->setPosition( ccp(size.width / 2, size.height*0.5 - 40) );
this ->addChild(pLabelHimi, 1);

运行效果图如下图所示:

QQ20131108-6


需要注意一点: 使用新加的字体库,那么创建CCLabelTTF时,传入的字体名是要有”.ttf”后缀的!

OK,本章就到这里~ 希望对大家有所帮助! :ku:










本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/1322253,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
JSON 数据处理 数据安全/隐私保护
Ktor库的高级用法:代理服务器与JSON处理
Ktor库的高级用法:代理服务器与JSON处理
|
6月前
|
XML 存储 JSON
51. 【Android教程】JSON 数据解析
51. 【Android教程】JSON 数据解析
162 2
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
178 0
在Java中处理JSON数据:Jackson与Gson库比较
|
5月前
|
存储 JSON 数据格式
Python教程:json中load和loads的区别
【7月更文挑战第17天】在Python的`json`模块中, `load`与`loads`函数均用于JSON至Python对象的转换, 区别在于: - **`loads`**处理JSON格式的**字符串** 其中`data.json`文件内容为`{&quot;name&quot;: &quot;Bob&quot;, &quot;age&quot;: 30}`。 简而言之, `loads`用于字符串, 而`load`用于文件对象。根据数据来源选择合适的方法。
130 5
|
4月前
|
存储 JSON 测试技术
Python中最值得学习的第三方JSON库
Python中最值得学习的第三方JSON库
|
4月前
|
存储 JSON 数据格式
Pandas 使用教程 CSV - CSV 转 JSON
Pandas 使用教程 CSV - CSV 转 JSON
44 0
|
4月前
|
JSON 数据格式 Python
Pandas 使用教程 JSON
Pandas 使用教程 JSON
47 0
|
4月前
|
JSON Go 数据格式
[golang]标准库-json
[golang]标准库-json
|
6月前
|
存储 JSON JavaScript
Python教程:一文了解Python中的json库
JSON(JavaScript Object Notation)是一种轻量级数据交换格式,易于人类阅读和编写,也易于计算机解析和生成。在Python中,JSON通常用于数据交换和存储,因为它与Python的字典和列表类型相似。
751 2
|
6月前
|
JSON API 数据格式
如何用 Python 的 requests 库发送 JSON 数据的 POST 请求
使用 requests 库发送 JSON 数据的 POST 请求是一个非常简单且实用的操作。通过将目标 URL 和 JSON 数据传递给 requests.post 方法,你可以轻松发送请求并处理响应。本篇文章介绍了从安装 requests 库,到发送 JSON 数据的 POST 请求,再到处理响应的整个流程。希望这篇文章能帮助你更好地理解并应用这个强大的 HTTP 请求库。