zoukankan      html  css  js  c++  java
  • 【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,double value)

    作用:保存一个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> 第二次运行项目。

    源码下载地址

  • 相关阅读:
    2、从0开始学算法 时间/空间复杂度(如何知道你的代码性能如何?)
    1、从0开始学算法 概述
    机器学习(五):通俗易懂决策树与随机森林及代码实践
    机器学习(四):通俗理解支持向量机SVM及代码实践
    机器学习(三):理解逻辑回归及二分类、多分类代码实践
    HDU 2492 Ping pong (树状数组)
    yum更新失败
    webpack3配置rules的问题
    置顶帖汇总
    2021.07.03软件更新公告
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3297260.html
Copyright © 2011-2022 走看看