Himi 原创, 欢迎转载,转载请在明显处注明! 谢谢。
原文地址:http://blog.csdn.net/xiaominghimi/article/details/6948046
首先向大家说句抱歉,可能一些童鞋看到我的微薄了,我说突然不想写博客了。。。是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=[NSArrayarrayWithObjects:saveStr1,saveStr2,nil];
-
//----Save
-
//这一句是将路径和文件名合成文件完整路径
-
NSString*Path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];
-
NSString*filename=[PathstringByAppendingPathComponent:@"saveDatatest"];
-
[NSKeyedArchiverarchiveRootObject:arraytoFile:filename];
-
//用于测试是否已经保存了数据
-
saveStr1=@"hhhhhhiiii";
-
saveStr2=@"mmmmmmiiii";
-
//----Load
-
array=[NSKeyedUnarchiverunarchiveObjectWithFile:filename];
-
saveStr1=[arrayobjectAtIndex:0];
-
saveStr2=[arrayobjectAtIndex:1];
-
CCLOG(@"str:%@",saveStr1);
-
CCLOG(@"astr:%@",saveStr2);
首先介绍第二种保存方式:NSUserDefaults
代码很简单就不多解释了直接上代码:
-
//=================NSUserDefaults========================
-
NSString*saveStr1=@"我是";
-
NSString*saveStr2=@"数据";
-
NSArray*array=[NSArrayarrayWithObjects:saveStr1,saveStr2,nil];
-
//Save
-
NSUserDefaults*saveDefaults=[NSUserDefaultsstandardUserDefaults];
-
[saveDefaultssetObject:arrayforKey:@"SaveKey"];
-
//用于测试是否已经保存了数据
-
saveStr1=@"hhhhhhiiii";
-
saveStr2=@"mmmmmmiiii";
-
//---Load
-
array=[saveDefaultsobjectForKey:@"SaveKey"];
-
saveStr1=[arrayobjectAtIndex:0];
-
saveStr2=[arrayobjectAtIndex:1];
-
CCLOG(@"str:%@",saveStr1);
-
CCLOG(@"astr:%@",saveStr2);
首先介绍第三种保存方式:Write写入方式
代码很简单就不多解释了直接上代码:
-
//=================Write写入方式========================
-
NSString*saveStr1=@"我是";
-
NSString*saveStr2=@"数据";
-
NSArray*array=[NSArrayarrayWithObjects:saveStr1,saveStr2,nil];
-
//----Save
-
NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
-
NSString*documentsDirectory=[pathsobjectAtIndex:0];
-
if(!documentsDirectory){
-
NSLog(@"没找到");
-
}
-
NSMutableArray*saveDataArray=nil;
-
NSString*appFile=[documentsDirectorystringByAppendingPathComponent:@"Savedatas.plist"];
-
[[NSArrayarrayWithObjects:array,nil]writeToFile:appFileatomically:NO];
-
//用于测试是否已经保存了数据
-
saveStr1=@"hhhhhhiiii";
-
saveStr2=@"mmmmmmiiii";
-
//----Load
-
if([[NSFileManagerdefaultManager]fileExistsAtPath:appFile]){
-
saveDataArray=[NSMutableArrayarrayWithContentsOfFile:appFile];
-
}else{
-
saveDataArray=[NSMutableArrayarrayWithContentsOfFile:[[NSBundlemainBundle]pathForResource:@"Savedatas"ofType:@"plist"]];
-
}
-
NSArray*strArray=[saveDataArrayobjectAtIndex:0];
-
saveStr1=[strArrayobjectAtIndex:0];
-
saveStr2=[strArrayobjectAtIndex:1];
-
CCLOG(@"str:%@",saveStr1);
-
CCLOG(@"astr:%@",saveStr2);
不论哪种形式代码都很容易理解,那么以上三种保存方式代码中都带有如下两行代码;
-
saveStr1=@"hhhhhhiiii";
-
saveStr2=@"mmmmmmiiii";
我已经注释上了,为了验证是否保存数据成功,如果没有保存成功,最后打印的肯定就是hhhhhhiiiiiiiii,mmmmiiiii啦~正常保存的话如下图控制台信息:
由于本章介绍过于简单,那么下面Himi对Write写入方式保存数据和读取数据封装了两个方法这里放出,给童鞋们行个方便:(其他两种大家封装起来风容易了,这里就不写了);
封装的函数如下:
-
//保存游戏数据
-
//参数介绍:
-
//(NSMutableArray*)data:保存的数据
-
//(NSString*)fileName:存储的文件名
-
-(BOOL)saveGameData:(NSMutableArray*)datasaveFileName:(NSString*)fileName
-
{
-
NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
-
NSString*documentsDirectory=[pathsobjectAtIndex:0];
-
if(!documentsDirectory){
-
NSLog(@"Documentsdirectorynotfound!");
-
returnNO;
-
}
-
NSString*appFile=[documentsDirectorystringByAppendingPathComponent:fileName];
-
return([datawriteToFile:appFileatomically:YES]);
-
}
-
//读取游戏数据
-
//参数介绍:
-
//(NSString*)fileName:需要读取数据的文件名
-
-(id)loadGameData:(NSString*)fileName
-
{
-
NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
-
NSString*documentsDirectory=[pathsobjectAtIndex:0];
-
NSString*appFile=[documentsDirectorystringByAppendingPathComponent:fileName];
-
NSMutableArray*myData=[[[NSMutableArrayalloc]initWithContentsOfFile:appFile]autorelease];
-
returnmyData;
-
}
使用代码如下:
-
NSString*saveStr1=@"测试保存读取";
-
NSString*saveStr2=@"两个函数";
-
NSMutableArray*array=[NSMutableArrayarrayWithObjects:saveStr1,saveStr2,nil];
-
[selfsaveGameData:arraysaveFileName:@"Himi"];
-
NSMutableArray*temp=(NSMutableArray*)[selfloadGameData:@"Himi"];
-
CCLOG(@"%@--%@",[tempobjectAtIndex:0],[tempobjectAtIndex:1]);
运行效果截图如下:
这里Himi要提醒大家两点细节也是需要注意的地方:
1.对于取出数据的时候需要注意,例如如下代码:
-
NSUserDefaults*saveDefaults=[NSUserDefaultsstandardUserDefaults];
-
NSMutableArray*arraySaveData=[saveDefaultsobjectForKey:@"OhSaveData"];
-
//NSMutableArray*arraySaveData=[NSMutableArrayarrayWithArray:[saveDefaultsobjectForKey:@"OhSaveData"]];
第二句代码是通过一个文件名获取你存储的数据,返回数据数组,但是!一定要注意这里返回的数据数组是不可修改的!及时你将读取的数据赋给一个可修改的数组中也一样无法修改其中的数据,所以如果你想将取出的数据进行修改那么这里需要要使用第三行代码来获取,这里Himi将获取出的数据数组首先copy给了可修改数组中,那么此时你的可修改数组就可以正常修改了!
2.修改已经的存储文件;代码如下:
-
NSUserDefaults*saveDefaults=[NSUserDefaultsstandardUserDefaults];
-
[saveDefaultssetObject:arraySaveDataforKey:@"已经存在的文件名"];
arraySaveData:表示新的数据数组
OK,本篇就介绍这里吧~继续忙了~
分享到:
相关推荐
【iOS-Cocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)! http://blog.csdn.net/xiaominghimi/article/details/7009503
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-扩展动作 http://blog.csdn.net/tt5267621/article/details/7626450
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-瞬时动作 http://blog.csdn.net/tt5267621/article/details/7624781
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-组合动作 http://blog.csdn.net/tt5267621/article/details/7626137
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-延时动作 http://blog.csdn.net/tt5267621/article/details/7625309
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-组合动作 http://blog.csdn.net/tt5267621/article/details/7626094
【iOS-Cocos2d游戏开发】触屏事件处理机制 http://blog.csdn.net/tt5267621/article/details/7631729
《iOS5 cocos2d游戏开发实战(第2版)》免费P
【iphone游戏开发】iphone-Cocos2d游戏开发之三:精灵表的详细讲解(二)小鸟眨眼睛
iOS 5 cocos2d游戏开发实战(第2版)
2:双击某个点,放大这块,并且控制了地图不能出边界 写了个场景缩放类,但地图碰到一个很奇怪的问题,可以探讨下,场景用的tileMap地图,缩放后会有一些黑线,很纠结,目前没找到解决方案,有答案的告诉我下,谢谢! 直接...
Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签
iOS实例开发源码——iliu-ios-cocos2d-viking-cba07f8.zip
iOS游戏应用源代码——iliu-ios-cocos2d-viking-cba07f8.zip
12-IOS游戏开发Cocos2d.pdf
iOS游戏应用源代码——iOS-Gamer-Cocos2D-86714e3.zip
iOS实例开发源码——iOS-Gamer-Cocos2D-86714e3.zip
Mac-OS-X-配置-Cocos2d-x-开发环境(iOS-和-Android).doc
iOS 5 cocos2d 游戏开发实战(第2版), 很不错的游戏开发入门教学用书