`
yangping_Account
  • 浏览: 191759 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

Cocos2D-iPhone游戏数据存储的四种常用方式

 
阅读更多

 

首先向大家说句抱歉,可能一些童鞋看到我的微薄了,我说突然不想写博客了。。。是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

代码很简单就不多解释了直接上代码:

  1. //=================NSUserDefaults========================  
  2. NSString *saveStr1 = @"我是";  
  3. NSString *saveStr2 = @"数据";  
  4. NSArray *array = [NSArray arrayWithObjects:saveStr1, saveStr2, nil];           
  5. //Save  
  6. NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];  
  7. [saveDefaults setObject:array forKey:@"SaveKey"];  
  8. //用于测试是否已经保存了数据  
  9. saveStr1 = @"hhhhhhiiii";  
  10. saveStr2 =@"mmmmmmiiii";    
  11. //---Load  
  12. array = [saveDefaults objectForKey:@"SaveKey"];  
  13. saveStr1 = [array objectAtIndex:0];  
  14. saveStr2 = [array objectAtIndex:1];  
  15. CCLOG(@"str:%@",saveStr1);  
  16. 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);

    不论哪种形式代码都很容易理解,那么以上三种保存方式代码中都带有如下两行代码;

    1. saveStr1 = @"hhhhhhiiii";  
    2. 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;  

    }    使用代码如下:

    1. NSString *saveStr1 = @"测试保存读取";  
    2. NSString *saveStr2 = @"两个函数";  
    3. NSMutableArray *array = [NSMutableArray arrayWithObjects:saveStr1, saveStr2, nil];   
    4. [self saveGameData:array saveFileName:@"Himi"];  
    5. NSMutableArray*temp =(NSMutableArray*)[self loadGameData:@"Himi"];  
    6. 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.修改已经的存储文件;代码如下:

    1. NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];   
    2. [saveDefaults setObject:arraySaveData forKey:@"已经存在的文件名"];  

    arraySaveData:表示新的数据数组


             OK,本篇就介绍这里吧~继续忙了~

分享到:
评论

相关推荐

    知易Cocos2D-iPhone 游戏开发教程005

    在本教程“知易Cocos2D-iPhone 游戏开发教程005”中,我们将深入探讨Cocos2D-iPhone这一强大的游戏开发框架,它为iOS平台上的2D游戏开发提供了丰富的功能和易用性。Cocos2D-iPhone是基于Cocos2D的一个版本,特别针对...

    Cocco2D-iPhone-04.rar_Cocco2D iPhone_cocos2d_cocos2d-x_iphone 游戏

    本教程“Cocco2D-iPhone-04.rar”是针对Cocos2D-iPhone游戏开发的第四部分,旨在帮助开发者进一步提升其在iPhone游戏开发领域的技能。 在这个教程中,你可能会学习到以下关键知识点: 1. **Cocos2D基础**:了解...

    Cocos2D-iPhone开发教程

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

    知易Cocos2D-iPhone 游戏开发教程

    《知易Cocos2D-iPhone 游戏开发教程》是一本专为想要学习和掌握Cocos2D-iPhone框架进行游戏开发的初学者和爱好者准备的教程。Cocos2D-iPhone是一款强大的2D游戏引擎,适用于iOS平台,它提供了丰富的功能和高效的性能...

    cocos2D-iPhone游戏开发

    这个教程详细介绍了如何使用Cocos2D-iPhone进行游戏开发,适合初学者入门,通过图文并茂的方式使得学习过程更为直观易懂。 在Cocos2D-iPhone中,核心概念包括场景(Scenes)、层(Layers)、精灵(Sprites)和动作...

    cocos2d-objc-ext, Cocos2D iphone的扩展和实用程序类.zip

    cocos2d-objc-ext, Cocos2D iphone的扩展和实用程序类 Cocos2D扩展cocos2d-iphone的扩展和实用程序类。cocos2d-iphone-ext,将包括不同的类和库,而不是suitet发布的官方 cocos2d-iphone 。 一些类最初可以能会被...

    cocos2d-iphone 游戏码源 魔塔20层

    《cocos2d-iphone 游戏码源 魔塔20层》是一个基于Cocos2D-iPhone的游戏开发项目,旨在实现一款名为“魔塔20层”的经典策略角色扮演游戏。Cocos2D-iPhone是Cocos2D的一个分支,是一个用于创建2D游戏、演示和其他图形...

    cocos2d iphone 中文开发资料大全

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

    cocos2d-iphone之魔塔20层第五部分

    《cocos2d-iphone之魔塔20层第五部分》是关于使用cocos2d-iphone框架开发经典游戏——魔塔的一个教程章节。在这个部分,我们将深入探讨如何利用cocos2d-iphone的特性来实现魔塔游戏的第20层的逻辑和交互。 首先,...

    cocos2d-iphone之魔塔20层第十部分

    最后,第十部分可能会涉及游戏保存和加载机制,使用cocos2d-iphone的持久化存储功能,确保玩家的游戏进度得以保存和恢复。 总的来说,这份教程将帮助开发者深入理解cocos2d-iphone框架,并通过实际的魔塔项目,学习...

    cocos2d-x游戏源码

    【cocos2d-x游戏源码】是一种基于C++的开源跨平台2D游戏开发框架,广泛用于开发手机游戏和桌面游戏。Cocos2d-x是Cocos2d-x项目的一部分,Cocos2d-x项目还包括Cocos2d-iphone、Cocos2d-html5等不同版本,适用于iOS、...

    cocos2d-iphone之魔塔20层第三部分

    可以使用cocos2d-iphone的序列化工具或自定义的数据存储方式。 7. **性能优化**:在移动设备上,性能优化至关重要。我们可能需要对场景进行分层,避免不必要的渲染,合理使用缓存,以及优化物理模拟等。 在实际...

    iOS实例开发源码——lhunath-Cocos2D-iPhone.old-9ab3d34.zip

    《深入剖析iOS游戏开发:基于lhunath-Cocos2D-iPhone源码分析》 Cocos2D-iPhone是一款强大的2D游戏开发框架,适用于iOS平台。它基于Python的Cocos2D,提供了丰富的功能,如场景管理、动作效果、精灵动画等,使得...

    iOS游戏应用源代码——Devint6669-cocos2d-iphone-bedca97.zip

    这是一个关于iOS游戏开发的资源,源代码基于Cocos2D-iPhone框架,版本号为bedca97。Cocos2D-iPhone是一个广泛使用的开源游戏引擎,特别适合于开发2D游戏,它提供了丰富的功能和易用性,使得开发者能够快速构建游戏...

    cocos2d-iphone之魔塔20层第二部分

    《cocos2d-iphone之魔塔20层第二部分》是针对移动平台游戏开发的一份教程,主要基于cocos2d-iphone框架,聚焦于创建一个20层的魔塔游戏。cocos2d-iphone是Cocos2D游戏引擎的iOS版本,它为开发者提供了丰富的图形、...

    cocos2d-iphone之魔塔20层第八部分

    在本教程中,我们将深入探讨如何使用Cocos2d-iPhone框架来开发一款名为“魔塔20层”的游戏,特别是在项目的第八部分。Cocos2d-iPhone是一款强大的2D游戏开发框架,专为iOS平台设计,它提供了一系列的游戏开发工具和...

    cocos2d-x联网

    本实例主要探讨如何利用cocos2d-x进行网络通信,通过HTTP协议连接百度服务器下载数据,并将这些数据本地化存储到iPhone应用程序中,从而模拟实际的网络下载流程。 首先,我们来看CCHttpClient,这是cocos2d-x提供的...

    ios-cocos2d-objc实现的跑酷游戏.zip

    【标题】"ios-cocos2d-objc实现的跑酷游戏.zip" 提供的是一个基于Cocos2D-Objective-C框架开发的iOS平台上的跑酷类游戏源代码。Cocos2D-Objective-C是Cocos2D游戏引擎的一个版本,专为iOS应用设计,它允许开发者使用...

    知易Cocco2D-iPhone开发教程-02

    7. **脚本语言支持**:除了Objective-C,Cocos2D-iPhone还支持Lua和JavaScript,提供了一种更灵活的脚本化开发方式。教程可能涵盖如何使用这些脚本语言进行游戏逻辑编程。 8. **性能优化**:Cocos2D-iPhone提供了...

Global site tag (gtag.js) - Google Analytics