`
shuai1234
  • 浏览: 972234 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

【COCOS2D-X(1.X 2.X) Json(cpp版)及新加字体库篇】在Cocos2dx引擎中封装、解析Json(cpp版)数据以及添加自定义字体库

 
阅读更多

本站文章均为 李华明Himi 原创,转载务必在明显处注明:(作者新浪微博: @李华明Himi 
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2dx/1492.html
 

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

    不知道改先说些什么,又是一个好久没写博客的阶段了啊~(很多童鞋也应该发现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”后缀的!

分享到:
评论

相关推荐

    Cocos2d-x 3.x游戏开发实战pdf含目录

    《Cocos2d-x 3.x游戏开发实战》是一本深度探讨Cocos2d-x 3.x框架的游戏开发书籍,适合对游戏编程有兴趣的开发者学习。Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的...

    cocos2d-x 3.x游戏开发实战光盘

    《cocos2d-x 3.x游戏开发实战光盘》是一个深入探讨cocos2d-x 3.x游戏引擎开发的资源集合,旨在帮助开发者通过实际案例掌握这一强大的2D游戏开发工具。cocos2d-x是一款开源的游戏开发框架,基于C++,广泛应用于跨平台...

    Cocos2d-x 3.x游戏开发之旅教程及完整源码下载

    Cocos2d-x 3.x游戏开发之旅教程及完整源码下载,使用最新cocos2d-x-3.14版本,在xcode7.3上已编译通过。 解决相关问题 1、解决源程序在高版本上无法编译问题 2、解决源程序中文注释部分,xcode上显示乱码问题 使用...

    cocos2d-x 3.x 游戏开发实战光盘源码

    cocos2d-x是一款跨平台的2D游戏开发引擎,广泛应用于iOS、Android、Windows等多平台的游戏开发,尤其适合制作2D图形和动画丰富的游戏。其核心特性包括渲染引擎、物理引擎、粒子系统、音频处理、脚本支持等,为开发者...

    Cocos2d-x 3.x制作2048

    1. Cocos2d-x 3.0版本及C++语言:该书使用Cocos2d-x的3.0-alpha1版本来开发游戏。Cocos2d-x是一个开源的游戏开发框架,适用于快速构建2D游戏、演示和其他图形/交互式应用。而C++是一种面向对象的编程语言,常用于...

    Cocos2d-x 3.X游戏开发入门精解

    《Cocos2d-x 3.X游戏开发入门精解》是一本专为初学者设计的指导书籍,旨在帮助读者快速掌握使用Cocos2d-x 3.X框架进行游戏开发的基本技能。Cocos2d-x是一个开源的游戏开发框架,广泛应用于跨平台游戏开发,支持iOS、...

    Cocos2d-x 3.X游戏开发实战 (肖文吉) 完整pdf

    《Cocos2d-x 3.X游戏开发实战》是由肖文吉编著的一本专业级游戏开发指南,专为想要掌握Cocos2d-x 3.X框架进行游戏开发的程序员设计。Cocos2d-x是一个开源的游戏开发框架,广泛应用于跨平台的2D游戏制作,支持iOS、...

    cocos2d-x 3.x游戏开发实战肖文吉光盘源代码

    《cocos2d-x 3.x游戏开发实战》是一本深度探索Cocos2d-x 3.x框架的游戏开发书籍,作者肖文吉提供了配套的源代码,旨在帮助读者通过实践来掌握Cocos2d-x 3.x的核心技术和游戏开发流程。这本书的源代码是学习Cocos2d-x...

    cocos2d-x-cocos2d-x-2.2.2.zip

    这个压缩包“cocos2d-x-cocos2d-x-2.2.2.zip”包含了cocos2d-x 的2.2.2版本,该版本是cocos2d-x发展中的一个重要里程碑,它提供了许多改进和优化,使得开发者能够更加高效地创建2D游戏和应用。 在cocos2d-x 2.2.2中...

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    这个“cocos2d-x-3.8.zip”压缩包包含的是cocos2d-x的经典版本3.8,对于想要学习旧版引擎或者需要回溯历史代码的开发者来说,这是一个非常宝贵资源。 cocos2d-x 3.8 版本的主要特性包括: 1. **跨平台支持**:支持...

    Cocos2d-x 2.2.x Json解析

    Cocos2d-x 2.2.x Json解析Demo 无需引入jsoncpp库 相关博文地址:http://blog.csdn.net/u012945598/article/details/17398925

    Cocos2d-x 3.x游戏开发之旅_PDF电子书下载 带书签目录 高清完整版.pdf

    1. **Cocos2d-x环境搭建**:介绍如何在不同的操作系统上安装和配置Cocos2d-x开发环境,包括设置编译器、集成开发环境(IDE)以及必要的依赖库。 2. **基本概念与架构**:讲解Cocos2d-x的核心组件,如Scene、Layer、...

    Cocos2d-x 3.x游戏开发之旅_完整版PDF电子书

    Cocos2d-x 3.x游戏开发之旅_完整版PDF电子书 上次传过一个给弄错了 而且我也不知道怎么把上次上传的那个删掉 看清楚 这个才是 完整版

    cocos2d-x-3.1.zip

    Cocos2d-x是一个开源的游戏开发框架,广泛用于2D游戏、实时渲染应用程序和其他互动内容的制作。这个压缩包“cocos2d-x-3.1.zip”包含了Cocos2d-x框架的3.1版本,这是一个经典且相对旧的版本,可能对于那些寻找历史...

    Cocos2d-x 3.x游戏开发之旅_高清完整版

    《Cocos2d-x 3.x游戏开发之旅》是一本专为游戏开发者设计的详细教程,专注于使用Cocos2d-x 3.x框架进行游戏开发。Cocos2d-x是跨平台的游戏开发库,它基于C++,并提供了Python和Lua的绑定,使得开发者能够用这些语言...

    Cocos2d-X 3.X 游戏案例开发大全光盘.txt

    资源为教学视频,有iOS基础熟悉XCode基本上不难学会,主要讲了一些Cocos2d游戏开发引擎中的一些具体调用

    Cocos2d-x 3.x游戏开发实战.pdf

    根据提供的文件信息,本文将围绕"Cocos2d-x 3.x游戏开发实战"这一主题进行深入探讨,并结合其描述及部分标签内容展开相关知识点的介绍。 ### Cocos2d-x 3.x概述 Cocos2d-x是一款非常流行的跨平台游戏引擎,广泛...

    Cocos2d-x 3.x游戏开发之旅_PDF电子书下载 带书签目录 高清完整版

    首先,Cocos2d-x 3.x是Cocos2d-x系列的一个重要版本,它引入了许多新特性和性能优化,比如改进的渲染引擎、新的物理引擎Box2D集成、更完善的动画系统以及对多语言和多平台的支持。在书中,作者会详细介绍这些核心...

    cocos2d-x 3.x 游戏开发实战资源

    在cocos2d-x 3.x版本中,引入了许多新特性与改进,如改进的渲染系统、性能优化、新的动作和特效、以及更好的物理引擎支持。这些都使得开发者能够更高效地创建出功能丰富、视觉效果出色的2D游戏。例如,新的渲染系统...

Global site tag (gtag.js) - Google Analytics