- 浏览: 236333 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
yulanlian:
...
实现在删除数据后,自增列的值连续 -
RonQi:
楼主写的很好,支持原创!
Google Protocol Buffers
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 配置的好处,JSon介绍,及为什么要使用Json都参看原来JsonCpp篇 的内容。本文仅针对TouchJson稍微进行一些讲解。 Cocos2D For IPhone是我见过的开源2D引擎中特性最完备的一个,即使速度上不算最快的。因为其只支持IPhone平台,所以能够在这个平台上做的很出众,现在新版的Cocos2D For IPhone已经支持iOS4和IPhone4,其工程模板的安装使用也是非常方便。新版甚至将原来的LGPL协议改为现在的MIT协议了,使用更加灵活自由。。。。前言
Cocos2D For IPhone + TouchJson
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在保持概念非常简单的情况下完成了配置任务。
发表评论
-
ios 国际化相关
2011-10-08 18:49 1410添加国际化 1. 代码中使用字符串的地方 使用 NS ... -
iPhone开发笔记
2011-09-26 21:52 1061退回输入键盘: - (BOOL) textFie ... -
ios开发基础知识 - 1
2011-09-26 21:51 1085输出 command+shift+r NSLog(@& ... -
ios---超链接的UILabel教程
2011-09-26 21:50 1488超链接的UILabel教程 -
ios开发基础问题总结
2011-09-26 21:49 1241订阅 1,如何进入应用后首 ... -
UILabel用法
2011-09-26 20:45 1779/设置换行 UILabel*label; / ... -
IPhone之UIScrollView [转载]
2011-09-22 15:55 858原文地址:IPhone之UIScrollView作者:飞 ... -
手势识别
2011-09-03 17:19 860注册: UISwipeGestureReco ... -
“碰撞”探测
2011-08-21 14:28 807首先要向大家说明的是,所谓“碰撞”探测没有大家想想 ... -
coco2d地图显示相关类
2011-08-21 07:55 1550摘自:知易教程 Cocos2d-iPhone 实现地图 ... -
Cocos2D 的事件处理机制
2011-08-21 07:21 1561摘自:知易教程 系统当前场景对象包含多个层 ... -
cocos2d游戏开发,常用工具集合
2011-08-20 19:40 796位图字体工具Bitmap Font ToolsBMFon ... -
iPhone OS 的 Touche 事件
2011-08-20 19:34 1304知易教程 基础知识 在开始介绍 iPhone OS ... -
iPad, iPhone, and Aspect Ratio
2011-08-05 11:58 917好,现在处理iphone上 ... -
Retina Display and Cocos2D
2011-08-05 11:57 1295最新版本的cocos2d完全 ... -
网络编程总结
2011-08-04 15:41 796一:确认网络环境3G/WIFI 1. 添加源文件和fra ... -
Cocos2D界面切换方式
2011-08-04 15:37 1600CCTransitionFade, //渐隐 ... -
Protocol协议的用法
2011-08-04 15:30 1218一、说明 两个类进行通讯,用协议就比较方便。 (书 ... -
IOS开源项目和官方例子汇总
2011-08-04 14:22 1811开源项目: 扫描wifi信息:http://code. ... -
cocos2d场景和UIViewController视图的切换
2011-08-04 14:20 1581cocos2d中从场景切换到UIViewController视 ...
相关推荐
在iphone上开发游戏的基本框架,cocos2d for iphone, 简单易懂,适合入门学习。
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+lua游戏demo源码 xcode工程
继续输入cd Cocos2d-iPhone-0.99.5(cd Cocos2d-iPhone-0.99.5为解压的cocos2d文件夹名称)进入cocos2d文件夹中。 4。继续输入./install-templates.sh则打开你文件夹下面的install-templates.sh进行cocos2d的安装。...
该资源主要用于cocos2d-x中Value与json字符串的相互转换,提供从json文件读取为cocos2d::Value,cocos2d::Value写入到文件,cocos2d::Value转换为json字符串,json字符串转换为cocos2d::Value。json字符串转换成cocos...
cocos2d-x +luajit使用,测试工程文件,使用luajit生成文件
Cocos2d-x windows vs2010 配置图文详解
ios上box2d的使用方式 cocos2d for iphone
cocos2d-iphone游戏开发pdf 完整版
Cocos2D-iPhone是 一个开源框架,利用它可以非常容易的在iPhone上开发2D游戏。它提供了物理,精灵(sprites),时差卷轴(parallax scrolling),支持iPhone touch和accelerator等很多功能。
Cocos2d for iPhone 1 Game Development Cookbook
cocos2d-x 网络通信简单实现,客户端基本上足够用了
免费、开源的2D游戏开发引擎,适用于iphone、ipad游戏开发。
Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整
cocos2d-x下跨平台的socket连接封装
Cocos2D-iPhone开发教程,从易到难,适合新手学习,老手进阶
cocos2d for iphone1 game development书籍 源码
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-扩展动作 http://blog.csdn.net/tt5267621/article/details/7626450
cocos2d-objc-ext, Cocos2D iphone的扩展和实用程序类 Cocos2D扩展cocos2d-iphone的扩展和实用程序类。cocos2d-iphone-ext,将包括不同的类和库,而不是suitet发布的官方 cocos2d-iphone 。 一些类最初可以能会被...