`

数据/配置 的存储方式 Json篇 以Cocos2D For Iphone+TouchJson为例

 
阅读更多

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

讨论新闻组及文件

前言

配置的好处,JSon介绍,及为什么要使用Json都参看原来JsonCpp篇 的内容。本文仅针对TouchJson稍微进行一些讲解。

 

Cocos2D For IPhone + TouchJson

    Cocos2D For IPhone是我见过的开源2D引擎中特性最完备的一个,即使速度上不算最快的。因为其只支持IPhone平台,所以能够在这个平台上做的很出众,现在新版的Cocos2D For IPhone已经支持iOS4和IPhone4,其工程模板的安装使用也是非常方便。新版甚至将原来的LGPL协议改为现在的MIT协议了,使用更加灵活自由。。。。
    TouchJson的使用属于不想在一个比较完全的Objective C环境中添加C++代码,(事实上使用Box2D的话还是避免不了)所以不使用JsonCpp来配合Cocos2D,何况Cocos2D的模板工程中本来就带有TouchJson了,将其删掉再插进JsonCpp也太不人道了。。。。呵呵。另外,因为TouchJson用Objective C完成,解析后也是个NSDictionary的对象所以与Objecitve C的对象组合使用会更加自然一些,使用苹果并为苹果开发,我是几乎已经习惯一整套都是用apple平台专有的东西了,唉。。。。对比当年简单的因为C#完全掌握在MS手中而不想学习,这也算是一种悲哀,因为Objective C比C#更加封闭,而且,起码C#还是这个世界上语法最漂亮,最先进语言的代表。

首先,利用Cocos2D的模板,创建一个新的工程,此时默认的效果是显示一个Hello World。如下:


这里,我们就不用其他图了,看看怎么配置这个Hello World。

最最基础的流程:
建立一个Json文件,仅仅有两行配置,一行表示显示的文字,一行表示文字的旋转
{ 
  "text"   : "Don't Hello World" ,
   "rotation"  : 20
} 
然后将此Json文件放入工程的Resources目录,我这里命名为picture.json。

然后可以开始着手解析这个Json文件了。
整个解析过程又分几步,首先,#import "CJSONDeserializer.h"
然后,获取到编译打包后在Resources目录文件的位置:
NSString *path  = [[NSBundle mainBundle]pathForResource:@"picture" ofType:@"json"];

获取文件路径后,从文件中读取数据:
NSData *jsonData = [[NSFileManager defaultManager] contentsAtPath:path];

获取文件数据后,解析Json文件:
// Parse JSON results with TouchJSON.  It converts it into a dictionary.
CJSONDeserializer *jsonDeserializer = [CJSONDeserializer deserializer];
NSError *error = nil;
NSDictionary *jsonDict = [jsonDeserializer deserializeAsDictionary:jsonData error:&error];
if (error) {
//handle Error, didn't have here.
}

此时jsonDict保存的就是解析后的Json数据了。
(以上代码都添加在HelloWorldScene的init中)

下面来看使用:
首先,text改变HelloWorld显示的文字:
    NSString *text = [jsonDict valueForKey:@"text"];
        // create and initialize a Label
        CCLabel* label = [CCLabel labelWithString:text fontName:@"Marker Felt" fontSize:64];
这里就已经是cocoa中NSDictionary 怎么使用的问题了。

然后,rotation改变旋转:
    NSNumber *rotation = [jsonDict valueForKey:@"rotation"];
    NSAssert(rotation, @"Didn't have a key named rotation");
    label.rotation = [rotation floatValue];

一切就绪,看效果:


上面的流程已经基本完整了,作为补充,还是添加一个Json数组使用的例子。
在TouchJson中,作者不推荐将根对象设定为数组(参见这里 ,TouchJson的作者自己说的),事实上也就不那么做就好了。我们随便用一个key来指定这个数组即可。
所以,定义Json文件如下:

{ 
  "result"  :
  [ 
    { 
      "text"   : "Don't Hello World" ,

      "rotation"  : 20

    } ,
    { 
      "text"   : "Just Hello World" ,
      "rotation"  : -20
    } 
  ] 
} 

然后,读取的时候还是先读取出一个NSDictionary对象,但是我们随后从中取出数组:
NSArray *dictArray = [jsonDict valueForKey:@"result"];

然后再遍历数组,此时数组中的每个对象又是NSDictionary对象
 
for (NSDictionary *dict in dictArray) {}

此时获取到NSDictionary的对象就与原来的字典对象很像了,直接通过valueForKey取对应的配置使用即可。较完整的循环代码如下:

    for (NSDictionary *dict in dictArray) {
      NSString *text = [dict valueForKey:@"text"];
      // create and initialize a Label
      CCLabel* label = [CCLabel labelWithString:text fontName:@"Marker Felt" fontSize:64];
      
      NSNumber *rotation = [dict valueForKey:@"rotation"];
      NSAssert(rotation, @"Didn't have a key named rotation");
      label.rotation = [rotation floatValue];
      
      // ask director the the window size
      CGSize size = [[CCDirector sharedDirector] winSize];
      
      // position the label on the center of the screen
      label.position =  ccp( size.width /2 , size.height/2 );
      
      // add the label as a child to this Layer
      [self addChild: label];
    }
此时可以看到同时显示多个文字的效果:


小结:
在使用了JsonCpp和TouchJson后,可以发现由于Json的数据结构主要就是一个Key:Value的映射加数组,所以无论在C++中还是在Objective C中,总是能用语言的原生结构很好的表示,(在C++中是map,在Objective C中是NSDictionary和NSArray)所以使用会非常方便,对比XML的强大并且复杂,简单的Json在保持概念非常简单的情况下完成了配置任务。

分享到:
评论

相关推荐

    CoCos2d for iphone

    《CoCos2d for iPhone》是一本专为初学者准备的教程书籍,旨在帮助读者掌握使用Cocos2d for iPhone这一强大而灵活的游戏开发框架来创建令人震撼的2D游戏。本书由作者Pablo Ruiz编写,并于2010年首次出版。该书不仅...

    cocos2d-iphone-2.0.tar.gz

    Cocos2d-iPhone是一个广泛使用的2D游戏开发框架,专为iOS设备(如iPhone和iPad)设计。这个开源项目让开发者能够轻松地创建高质量的游戏、应用和交互式内容,而无需深入理解底层图形和物理编程。"cocos2d-iphone-2.0...

    cocos2d_iPhone_API.chm

    cocos2d for iPhone API,用于快速开发iPhone 2D程序。 该文档根据下列内容编译 cocos2d for iPhone API reference ver.0.7.1 URL: http://www.sapusmedia.com/cocos2d-iphone-api-doc/ cocos2d程序效果图: ...

    cocos2d-x+socket

    cocos2d-x不提供内置的序列化工具,开发者可以自定义数据结构,或使用JSON、protobuf等第三方库进行数据转换。 2. 异步通信:为了保证游戏的流畅性,通常会采用异步方式进行网络通信。cocos2d-x提供了调度器...

    cocos2d-x windows vs2010配置

    "cocos2d-x windows vs2010 配置详解" 本文将详细介绍如何在 Windows 环境下使用 Visual Studio 2010 配置 Cocos2d-x 游戏引擎。Cocos2d-x 是一个跨平台的游戏引擎,可以在多种平台上运行,包括 Windows、Mac OS X...

    【cocos creator】网页/浏览器读取保存json/text文件

    1. `cc.loader.loadJson()`: 这个函数用于加载JSON文件,通常用于加载资源配置或游戏数据。例如: ```javascript cc.loader.loadJson('path/to/your/json/file', function(err, data) { if (!err) { // 使用加载...

    cocos2d-x + socket

    【cocos2d-x + socket】是一个关于使用游戏开发框架cocos2d-x与网络通信技术socket相结合的主题。cocos2d-x是一个开源的、跨平台的2D游戏引擎,广泛应用于iOS、Android、Windows等多平台的游戏开发。而socket是网络...

    Cocos2d-x + Lua接入iOS原生SDK的实现方案 - Cocos2d-x 开发笔记 - Cocos2d-x系列教程

    这里以Quick-Cocos2d-x 2.1版本为例,因为它是作者过去项目中常用的版本,但基本思路适用于新版本。 解决跨语言交互的关键在于构建一个桥梁,让Lua能够间接调用Objective-C代码。由于Lua可以通过Lua Binding与C/C++...

    cocos2d-iphone 2.1 第一部分

    继续输入cd Cocos2d-iPhone-0.99.5(cd Cocos2d-iPhone-0.99.5为解压的cocos2d文件夹名称)进入cocos2d文件夹中。 4。继续输入./install-templates.sh则打开你文件夹下面的install-templates.sh进行cocos2d的安装。...

    cocos2d-x+lua游戏demo源码

    【cocos2d-x+lua游戏demo源码】是一个基于cocos2d-x游戏引擎和lua脚本语言的游戏示例项目。cocos2d-x是一个跨平台的2D游戏开发框架,广泛应用于移动设备,如iOS和Android。lua是一种轻量级的、面向过程的编程语言,...

    cocos2d-iphone游戏开发pdf

    《cocos2d-iphone游戏开发》是一本深入讲解如何使用cocos2d框架进行iPhone游戏开发的专业书籍。cocos2d是一个强大的2D游戏开发框架,它为开发者提供了丰富的功能,包括图形渲染、动画系统、物理引擎支持、音频处理等...

    Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整

    标题中提到了"Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整",这里面包含了几个关键知识点: 1. Cocos2d-x:是一个开源的游戏开发框架,它主要用于开发跨平台的游戏和应用程序,支持iOS、...

    cocos2d-x json字符串与cocos2d::Value转换工具

    该资源主要用于cocos2d-x中Value与json字符串的相互转换,提供从json文件读取为cocos2d::Value,cocos2d::Value写入到文件,cocos2d::Value转换为json字符串,json字符串转换为cocos2d::Value。json字符串转换成cocos...

    黄金矿工cocos2d源代码+素材

    【黄金矿工Cocos2D源代码+素材】是一个学习Cocos2D游戏开发的宝贵资源,它包含了一个完整的游戏项目——"黄金矿工"的所有源代码和相关的图像素材。这个资源对于想要深入理解Cocos2D游戏引擎,或者希望学习如何构建2D...

    cocos2d iphone 中文开发资料大全

    Cocos2d-iPhone 是一款广泛使用的开源游戏开发框架,专为iOS平台设计。它基于C++和Objective-C实现,提供了丰富的功能,让开发者能够轻松创建2D游戏、交互式图书和其他图形应用程序。本资源包“cocos2d iPhone 中文...

    【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-扩展动作

    在iOS游戏开发中,Cocos2d-x是一个广泛使用的2D游戏引擎,其Cocos2d-iPhone版本专为Objective-C编程语言设计。本主题主要关注Cocos2d-iPhone中的“动作”(Actions)机制,这是一个强大的工具,用于创建各种动画效果...

    Cocos2d_for_iPhone_1_Game_Development_Cookbook代码

    《Cocos2d for iPhone 1 Game Development Cookbook》是一本专为iOS游戏开发人员准备的实战指南,书中通过丰富的示例代码介绍了如何利用Cocos2d框架开发iPhone游戏。Cocos2d是一款强大的2D游戏引擎,广泛应用于移动...

    Cocos2D-iPhone开发教程

    Cocos2D-iPhone是一款强大的2D游戏开发框架,它为iOS平台提供了丰富的功能和工具,使得开发者可以轻松创建各种游戏和互动应用。本教程旨在引导新手入门,并帮助经验丰富的开发者提升技能。以下是对Cocos2D-iPhone...

    cocos2d-x+luaJIT

    《cocos2d-x与LuaJIT的深度整合与应用》 在游戏开发领域,cocos2d-x是一个广泛使用的2D游戏引擎,它基于C++编写,支持多平台,包括iOS、Android以及桌面系统。而LuaJIT则是一款优化过的Lua虚拟机,它的执行效率极高...

Global site tag (gtag.js) - Google Analytics