`
810364804
  • 浏览: 773664 次
文章分类
社区版块
存档分类
最新评论

【Cocos2d-X开发学习笔记】第29期:游戏中数据的存储(上)

 
阅读更多

本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010

一般游戏中都需要记录玩家数据,便于玩家下次登录时能够接着上次的游戏记录继续游戏。这样一来就需要我们在

开发时对玩家数据进行存档与读档。对于游戏数据的存储,在不同手机操作系统下都有自己的存储方式,例如常见的

SQLite等,在Cocos2D-X引擎中考虑到跨平台性,它也为开发者提供了跨平台的存储相关类CCUserDefault,那么这

一期我们就一起来学习如何使用Cocos2D-X提供的CCUserDefault。

一、游戏数据存储

由于CCUserDefault的函数都是静态调用,是不需要创建其对象的,所以下面我们一起来看看CCUserDefault的一

些常用函数。

<1> setBoolForKey(const char * pKey,bool value)

作用:保存一个bool类型数据。

参数1:key。

参数2:value。

<2> setDoubleForKey(const char * pKey,doublevalue)

作用:保存一个double类型数据。

参数1:key。

参数2:value。

<3> setFloatForKey(const char * pKey,float value)

作用:保存一个float类型数据。

参数1:key。

参数2:value。

<4> setIntegerForKey(const char * pKey,int value)

作用:保存一个int类型数据。

参数1:key。

参数2:value。

<5> setStringForKey(const char * pKey,string & value)

作用:保存一个string类型数据。

参数1:key。

参数2:value。

<6> bool getBoolForKey(const char * pKey,bool defaultValue)

作用:获取存储一个bool类型数据。

参数1:key。

参数2:当key对应的数据不存在时,默认返回的值。

<7> bool getDoubleForKey(const char * pKey,double defaultValue)

作用:获取存储一个double类型数据。

参数1:key。

参数2:当key对应的数据不存在时,默认返回的值。

<8> bool getFloatForKey(const char * pKey,float defaultValue)

作用:获取存储一个float类型数据。

参数1:key。

参数2:当key对应的数据不存在时,默认返回的值。

<9> bool getIntegerForKey(const char * pKey,int defaultValue)

作用:获取存储一个int类型数据。

参数1:key。

参数2:当key对应的数据不存在时,默认返回的值。

<10> bool getStringForKey(const char * pKey,string& defaultValue)

作用:获取存储一个string类型数据。

参数1:key。

参数2:当key对应的数据不存在时,默认返回的值。

<11> bool flush()

作用:提交数据,将数据存入文件中。

通过学习CCUserDefault提供的函数后,我们可以看出这些函数的使用方法很简单,但是在使用时需要提醒大家注意两点:

<1> 不论是存储了一个还是多个支持的数据类型后,都必须调用flush()函数,当flush()被调用后,你之前存储的数据

才会真正保存到存储文件中。

<2> 使用CCUserDefault的getXXX函数时,应尽可能传入一个默认值(第2个参数),以免获取到空数据造成程序异

常等。

二、数据存储实例

1、首先新建Cocos2D-X项目,取名为“MyDataSave01”,然后在HelloWorldScene.cpp文件的init函数中添加如下所

示代码。

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {      
        CC_BREAK_IF(! CCLayer::init());

        CCLabelTTF *ttf = CCLabelTTF::create("", "Helvetica", 23);
		ttf->setPosition(ccp(240,160));
		addChild(ttf);
    
		if(CCUserDefault::sharedUserDefault()->getBoolForKey("bool",false)){
			ttf->setString("hava data , start read data");
        
			//Load
			bool iBool      =  CCUserDefault::sharedUserDefault()->getBoolForKey("bool",false);
			double iDouble  =  CCUserDefault::sharedUserDefault()->getDoubleForKey("double",0.0);
			float iFloat    =  CCUserDefault::sharedUserDefault()->getFloatForKey("float",0.0);
			int iInt        =  CCUserDefault::sharedUserDefault()->getIntegerForKey("int",0);
			std::string iString  =  CCUserDefault::sharedUserDefault()->getStringForKey("string","");           

		}else{
			ttf->setString("not hava data , start save data");
        
			CCUserDefault::sharedUserDefault()->setBoolForKey("bool", true);
			CCUserDefault::sharedUserDefault()->setDoubleForKey("double", 9.22);
			CCUserDefault::sharedUserDefault()->setFloatForKey("float", 8.23);
			CCUserDefault::sharedUserDefault()->setIntegerForKey("int", 23);
			CCUserDefault::sharedUserDefault()->setStringForKey("string", "Himi");
			//提交
			CCUserDefault::sharedUserDefault()->flush();
		}

        bRet = true;
    } while (0);

    return bRet;
}


2、项目效果图。

<1> 第一次运行项目。

<2> 第二次运行项目。

源码下载地址

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics