- 浏览: 191759 次
- 性别:
- 来自: 无锡
文章分类
最新评论
-
luoqianjiang:
很好,谢谢
一些iOS高效开源类库 -
sgjsdf5944:
没看明白。。。。。。。。。。
UIWebView打开doc、pdf文件 -
593864589:
mac 上不支持呢?
cocos2d 粒子设计器 -
寻墨小楼:
多谢了...正在弄这个。
mysql for mac 安装和基本操作 -
yueliancao:
楼主如何联系啊 我的MAC系统 #LoadModule php ...
mac OS x中配置apache + php + mysql
首先向大家说句抱歉,可能一些童鞋看到我的微薄了,我说突然不想写博客了。。。是Himi的错,我不该发微薄让大家担心的;Himi也是因为受到其他的因素影响所以就想这样发泄一下,但是大家放心!写博客是我的兴趣也是我一直的坚持;不再理会其他了,我会继续坚持着自己的路~坚持坚持~
OK,今天Himi介绍游戏存储这一块,在Android游戏开发中Himi介绍了好几种保存的方式和形式,那么在iOS中也有几种方式,一般常用的有以下四种形式:
1. NSKeyedArchiver
2. NSUserDefaults
3. Write写入方式
4. SQLite3
这里Himi就不再介绍SQlite数据库了,Android游戏存储中我也介绍过SQLite如何保存数据,但是由于这一块很多童鞋没有接触过数据库相关知识,所以即使讲了也没作用,那么对于数据数据库的童鞋们可以参考其他博文或书籍进行学习;
首先介绍第一种保存方式:NSKeyedArchiver
代码很简单就不多解释了直接上代码:
//=================NSKeyedArchiver========================
NSString *saveStr1 = @"我是";
NSString *saveStr2 = @"数据";
NSArray *array = [NSArray arrayWithObjects:saveStr1, saveStr2, nil];
//----Save
//这一句是将路径和文件名合成文件完整路径
NSString *Path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filename = [Path stringByAppendingPathComponent:@"saveDatatest"];
[NSKeyedArchiver archiveRootObject:array toFile:filename];
//用于测试是否已经保存了数据
saveStr1 = @"hhhhhhiiii";
saveStr2 =@"mmmmmmiiii";
//----Load
array = [NSKeyedUnarchiver unarchiveObjectWithFile: filename];
saveStr1 = [array objectAtIndex:0];
saveStr2 = [array objectAtIndex:1];
CCLOG(@"str:%@",saveStr1);
CCLOG(@"astr:%@",saveStr2);
首先介绍第二种保存方式:NSUserDefaults
代码很简单就不多解释了直接上代码:
- //=================NSUserDefaults========================
- NSString *saveStr1 = @"我是";
- NSString *saveStr2 = @"数据";
- NSArray *array = [NSArray arrayWithObjects:saveStr1, saveStr2, nil];
- //Save
- NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
- [saveDefaults setObject:array forKey:@"SaveKey"];
- //用于测试是否已经保存了数据
- saveStr1 = @"hhhhhhiiii";
- saveStr2 =@"mmmmmmiiii";
- //---Load
- array = [saveDefaults objectForKey:@"SaveKey"];
- saveStr1 = [array objectAtIndex:0];
- saveStr2 = [array objectAtIndex:1];
- CCLOG(@"str:%@",saveStr1);
-
CCLOG(@"astr:%@",saveStr2); 首先介绍第三种保存方式:Write写入方式
代码很简单就不多解释了直接上代码://=================Write写入方式======================== NSString *saveStr1 = @"我是"; NSString *saveStr2 = @"数据"; NSArray *array = [NSArray arrayWithObjects:saveStr1, saveStr2, nil]; //----Save NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; if (!documentsDirectory) { NSLog(@"没找到"); } NSMutableArray *saveDataArray=nil; NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"Savedatas.plist"]; [[NSArray arrayWithObjects:array,nil] writeToFile:appFile atomically:NO]; //用于测试是否已经保存了数据 saveStr1 = @"hhhhhhiiii"; saveStr2 =@"mmmmmmiiii"; //----Load if([[NSFileManager defaultManager] fileExistsAtPath:appFile]){ saveDataArray = [NSMutableArray arrayWithContentsOfFile:appFile]; } else{ saveDataArray = [NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Savedatas" ofType:@"plist"]]; } NSArray *strArray = [saveDataArray objectAtIndex:0]; saveStr1 = [strArray objectAtIndex:0]; saveStr2 = [strArray objectAtIndex:1]; CCLOG(@"str:%@",saveStr1); CCLOG(@"astr:%@",saveStr2);
不论哪种形式代码都很容易理解,那么以上三种保存方式代码中都带有如下两行代码;
- saveStr1 = @"hhhhhhiiii";
- saveStr2 =@"mmmmmmiiii";
我已经注释上了,为了验证是否保存数据成功,如果没有保存成功,最后打印的肯定就是hhhhhhiiiiiiiii,mmmmiiiii啦~正常保存的话如下图控制台信息:由于本章介绍过于简单,那么下面Himi对Write写入方式保存数据和读取数据封装了两个方法这里放出,给童鞋们行个方便:(其他两种大家封装起来风容易了,这里就不写了);
封装的函数如下:
//保存游戏数据
//参数介绍:
// (NSMutableArray *)data :保存的数据
// (NSString *)fileName :存储的文件名
-(BOOL) saveGameData:(NSMutableArray *)data saveFileName:(NSString *)fileName
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
if (!documentsDirectory) {
NSLog(@"Documents directory not found!");
return NO;
}
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];
return ([data writeToFile:appFile atomically:YES]);
}
//读取游戏数据
//参数介绍:
// (NSString *)fileName :需要读取数据的文件名
-(id) loadGameData:(NSString *)fileName
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];
NSMutableArray *myData = [[[NSMutableArray alloc] initWithContentsOfFile:appFile] autorelease];
return myData;
} 使用代码如下:
- NSString *saveStr1 = @"测试保存读取";
- NSString *saveStr2 = @"两个函数";
- NSMutableArray *array = [NSMutableArray arrayWithObjects:saveStr1, saveStr2, nil];
- [self saveGameData:array saveFileName:@"Himi"];
- NSMutableArray*temp =(NSMutableArray*)[self loadGameData:@"Himi"];
- CCLOG(@"%@--%@",[temp objectAtIndex:0],[temp objectAtIndex:1]);
运行效果截图如下:
这里Himi要提醒大家两点细节也是需要注意的地方:
1.对于取出数据的时候需要注意,例如如下代码:
NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *arraySaveData =[saveDefaults objectForKey:@"OhSaveData"];
//NSMutableArray *arraySaveData=[NSMutableArray arrayWithArray:[saveDefaults objectForKey:@"OhSaveData"]];
第二句代码是通过一个文件名获取你存储的数据,返回数据数组,但是!一定要注意这里返回的数据数组是不可修改的!及时你将读取的数据赋给一个可修改的数组中也一样无法修改其中的数据,所以如果你想将取出的数据进行修改那么这里需要要使用第三行代码来获取,这里Himi将获取出的数据数组首先copy给了可修改数组中,那么此时你的可修改数组就可以正常修改了!2.修改已经的存储文件;代码如下:
- NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
- [saveDefaults setObject:arraySaveData forKey:@"已经存在的文件名"];
arraySaveData:表示新的数据数组OK,本篇就介绍这里吧~继续忙了~
发表评论
-
cocos2d游戏开发,常用工具集合
2012-01-07 13:42 788位图字体工具Bitmap Font ToolsBMFont ( ... -
cocos2d-x开源游戏引擎发布0.10.0版,支持iphone/android/bada/win32/linux平台
2012-01-02 22:28 1524cocos2d-1.0.1-x-0.10.0版本 http:/ ... -
详解CCProgressTimer 进度条
2012-01-06 00:05 1036原文地址:http://blog.csdn.net/xi ... -
Cocos2D-iPhone-Extensions嵌入视频播放
2012-01-06 00:05 758原文地址:http://blog.csdn.net ... -
CCSprite利用Bezier(贝塞尔)做抛物线动作
2012-01-06 00:05 868原文地址:http://blog.csdn.net/xi ... -
浅析使用C++/C/OC在iOS游戏中混编
2012-01-11 22:10 1196原文地址:http://blog.csdn.net/xi ... -
使用Box2d物理系统
2012-01-11 22:10 863原文地址:http://blog.csdn.net/ ... -
添加粒子特效并解决粒子系统特效与Layer之间的坐标问题
2012-01-11 22:11 829原文地址:http://blog.csdn.net/ ... -
对触屏事件追加讲解,解决无法触发ccTouchMoved事件
2012-01-11 22:11 1013原文地址:http://blog.csdn.net/xi ... -
从零开始学习OpenGL ES之二 – 简单绘图概述
2012-01-02 22:29 1363还有许多理论知识需要讨论,但与其花许多时间在复杂的数学 ... -
一. 搭建cocos2d游戏引擎环境HelloWorld!
2012-01-29 16:05 729注意:本文经 Himi 论坛ID:xiaom ... -
CCSpeed实现CCAnimate动画进行时设置慢动作
2012-01-30 13:48 1076原文地址:http://bl ... -
Cocos2D自定义精灵类并为你的精灵设置攻击帧
2012-01-30 13:49 915上周貌似没有写新的博文,那么今天Himi写个精品的博文 ... -
Cocos2D-iPhone精灵的基础知识点总汇
2012-03-06 09:41 985最近写了不少Cocos2d的博文了,那么由于Him ... -
Cocos2D-iPhone解决滚屏背景/拼接地图有黑边(缝隙)
2012-03-06 09:41 1789本章节主要为大家 ... -
灵活使用精灵可视区域(TextureRect)与锚点(anchorPoint)
2012-03-06 09:42 1039今天Himi单用一篇博文来给童鞋们介绍精灵相关 ... -
Cocos2D-iPhone添加本地通知(UILocalNotification)
2012-03-06 09:42 1770首先申明下:希望大家转载的时候不要忘记给原文连接, ... -
详解CCProgressTimer 进度条
2012-03-09 17:43 1018游戏开发中难免用到进度条,例如做一些游戏技能的C ... -
Cocos2D-iPhone-Extensions嵌入视频播放
2012-03-09 17:43 817自从Himi书籍《Android游戏编程之从零开始》一 ... -
CCSprite利用Bezier(贝塞尔)做抛物线动作
2012-03-09 17:43 1808如果我们想实现让CCSprite进行抛物线运动的话,那么 ...
相关推荐
在本教程“知易Cocos2D-iPhone 游戏开发教程005”中,我们将深入探讨Cocos2D-iPhone这一强大的游戏开发框架,它为iOS平台上的2D游戏开发提供了丰富的功能和易用性。Cocos2D-iPhone是基于Cocos2D的一个版本,特别针对...
本教程“Cocco2D-iPhone-04.rar”是针对Cocos2D-iPhone游戏开发的第四部分,旨在帮助开发者进一步提升其在iPhone游戏开发领域的技能。 在这个教程中,你可能会学习到以下关键知识点: 1. **Cocos2D基础**:了解...
Cocos2D-iPhone是一款强大的2D游戏开发框架,它为iOS平台提供了丰富的功能和工具,使得开发者可以轻松创建各种游戏和互动应用。本教程旨在引导新手入门,并帮助经验丰富的开发者提升技能。以下是对Cocos2D-iPhone...
《知易Cocos2D-iPhone 游戏开发教程》是一本专为想要学习和掌握Cocos2D-iPhone框架进行游戏开发的初学者和爱好者准备的教程。Cocos2D-iPhone是一款强大的2D游戏引擎,适用于iOS平台,它提供了丰富的功能和高效的性能...
这个教程详细介绍了如何使用Cocos2D-iPhone进行游戏开发,适合初学者入门,通过图文并茂的方式使得学习过程更为直观易懂。 在Cocos2D-iPhone中,核心概念包括场景(Scenes)、层(Layers)、精灵(Sprites)和动作...
cocos2d-objc-ext, Cocos2D iphone的扩展和实用程序类 Cocos2D扩展cocos2d-iphone的扩展和实用程序类。cocos2d-iphone-ext,将包括不同的类和库,而不是suitet发布的官方 cocos2d-iphone 。 一些类最初可以能会被...
《cocos2d-iphone 游戏码源 魔塔20层》是一个基于Cocos2D-iPhone的游戏开发项目,旨在实现一款名为“魔塔20层”的经典策略角色扮演游戏。Cocos2D-iPhone是Cocos2D的一个分支,是一个用于创建2D游戏、演示和其他图形...
Cocos2d-iPhone 是一款广泛使用的开源游戏开发框架,专为iOS平台设计。它基于C++和Objective-C实现,提供了丰富的功能,让开发者能够轻松创建2D游戏、交互式图书和其他图形应用程序。本资源包“cocos2d iPhone 中文...
《cocos2d-iphone之魔塔20层第五部分》是关于使用cocos2d-iphone框架开发经典游戏——魔塔的一个教程章节。在这个部分,我们将深入探讨如何利用cocos2d-iphone的特性来实现魔塔游戏的第20层的逻辑和交互。 首先,...
最后,第十部分可能会涉及游戏保存和加载机制,使用cocos2d-iphone的持久化存储功能,确保玩家的游戏进度得以保存和恢复。 总的来说,这份教程将帮助开发者深入理解cocos2d-iphone框架,并通过实际的魔塔项目,学习...
【cocos2d-x游戏源码】是一种基于C++的开源跨平台2D游戏开发框架,广泛用于开发手机游戏和桌面游戏。Cocos2d-x是Cocos2d-x项目的一部分,Cocos2d-x项目还包括Cocos2d-iphone、Cocos2d-html5等不同版本,适用于iOS、...
可以使用cocos2d-iphone的序列化工具或自定义的数据存储方式。 7. **性能优化**:在移动设备上,性能优化至关重要。我们可能需要对场景进行分层,避免不必要的渲染,合理使用缓存,以及优化物理模拟等。 在实际...
《深入剖析iOS游戏开发:基于lhunath-Cocos2D-iPhone源码分析》 Cocos2D-iPhone是一款强大的2D游戏开发框架,适用于iOS平台。它基于Python的Cocos2D,提供了丰富的功能,如场景管理、动作效果、精灵动画等,使得...
这是一个关于iOS游戏开发的资源,源代码基于Cocos2D-iPhone框架,版本号为bedca97。Cocos2D-iPhone是一个广泛使用的开源游戏引擎,特别适合于开发2D游戏,它提供了丰富的功能和易用性,使得开发者能够快速构建游戏...
《cocos2d-iphone之魔塔20层第二部分》是针对移动平台游戏开发的一份教程,主要基于cocos2d-iphone框架,聚焦于创建一个20层的魔塔游戏。cocos2d-iphone是Cocos2D游戏引擎的iOS版本,它为开发者提供了丰富的图形、...
在本教程中,我们将深入探讨如何使用Cocos2d-iPhone框架来开发一款名为“魔塔20层”的游戏,特别是在项目的第八部分。Cocos2d-iPhone是一款强大的2D游戏开发框架,专为iOS平台设计,它提供了一系列的游戏开发工具和...
本实例主要探讨如何利用cocos2d-x进行网络通信,通过HTTP协议连接百度服务器下载数据,并将这些数据本地化存储到iPhone应用程序中,从而模拟实际的网络下载流程。 首先,我们来看CCHttpClient,这是cocos2d-x提供的...
【标题】"ios-cocos2d-objc实现的跑酷游戏.zip" 提供的是一个基于Cocos2D-Objective-C框架开发的iOS平台上的跑酷类游戏源代码。Cocos2D-Objective-C是Cocos2D游戏引擎的一个版本,专为iOS应用设计,它允许开发者使用...
7. **脚本语言支持**:除了Objective-C,Cocos2D-iPhone还支持Lua和JavaScript,提供了一种更灵活的脚本化开发方式。教程可能涵盖如何使用这些脚本语言进行游戏逻辑编程。 8. **性能优化**:Cocos2D-iPhone提供了...