cocos2dx数据存储 Userdefault数据存储实例

本文详细介绍了Cocos2d-x中UserDefault组件的功能及使用方法,包括其如何通过XML文件存储数据,提供了bool、int、float、double和string五种数据类型的设置与获取方法,并附带了一个具体的实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于Userdefault数据存储的介绍网上有很多,下面贴一个我觉得比较好的,还有自己在项目中的实际应用:

CCUserDefault采用XML存储技术,就是一般的键值对,这个类似C++中的map的映射(键——值)。一个关键字对应一个值。其实现的接口也比较简单实用,通过传统的set()、get()方法访问和修改值。

它支持五种数据:bool、int、float、double、string。

1、原理

1)类似map的映射(键——值)。一个关键字对应一个值,并利用set()/get()进行访问。

2)数据直接存储在一个XML文件中,并且文件名为程序项目的名字,如“MyTest.xml”。

3)首次使用时,XML不存在,CCUserDefault会自动创建相应的XML文件。

2、设置数据值set

通过(键——值)的方式进行设置。

void setBoolForKey(   constchar* pKey, bool value);               //设置一个bool值

void setIntegerForKey(constchar* pKey, int value);                //设置一个int值

void setFloatForKey(  constchar* pKey, float value);              //设置一个float值

void setDoubleForKey( constchar* pKey, double value);             //设置一个double值

void setStringForKey( constchar* pKey, conststd::string& value); //设置一个string值

 

3、获取数据值get

通过关键字,来从XML文件中获取数据值。

若关键字不存在,会自动设置(键——值)映射,并设置对应的默认值defaultValue。

bool getBoolForKey(   constchar* pKey, bool defaultValue = false);                   //读取一个bool值

int getIntegerForKey(constchar* pKey, int defaultValue = 0);                         //读取一个int值

float getFloatForKey(  constchar* pKey, float defaultValue = 0.0);                   //读取一个float值

double getDoubleForKey( constchar* pKey, double defaultValue = 0.0);                 //读取一个double值

std::string getStringForKey( constchar* pKey, conststd::string& defaultValue = ""); //读取一个string值


4、保存flush

set完后,数据不会马上保存到XML文件中。

所以一定要记得用flush()来保存数据,否则会丢失!

CCUserdefault::sharedUserdefault()->flush();


贴一个实例代码作为例子,int bool类型的数据存储,其他的同理。

实例代码:

DataManager.h

#ifndef __Data_Manager__
#define __Data_Manager__

#include<iostream>
#include "cocos2d.h"

#define RSet DataManager::setData
#define RGet DataManager::getData
#define RFlush DataManager::flush(true)
#define MC_USER CCUserDefault::sharedUserDefault()

using namespace cocos2d;


class DataManager
{
public:

static DataManager * getInstance();

/** 储存数据 **/
static void setData(std::string key, const char* data);
static void setData(std::string key,  int data);
static void setData(std::string key,  float data);
static void setData(std::string key,  bool data);

static std::string getData(std::string key, const char *data);
static int getData(std::string key,  int data);
static float getData(std::string  key,  float data);
static bool getData(std::string key,  bool data);


/** 确认储存 **/
static  void flush(bool pBool = false);

/*
设置音效状态
*/
static void savePlayMusic(bool IsPause);
/*
获取音效状态
*/
static bool readPlayMusic();

/** 
* 取得金币数,获取的来源:每日签到、商店
*/
static int getGoldNum();

/** 
* 设置金币数,获取的来源:每日签到、商店
*/
static void setGoldNum(int m_GoldNum);

};

#endif

注意:cocos3.10以上版本Userdefault没有sharedpreference(),所以需要改成

#define MC_USER UserDefault::getInstance()



DataManager.cpp

#include"DataManager.h"

static DataManager * _instance = NULL;
DataManager * DataManager::getInstance()
{
if(!_instance)
{
_instance = new DataManager();
}                                       
return _instance;
}

/**写入数据**/
void DataManager::setData(std::string key, const char*data){
MC_USER->setStringForKey(key.c_str(), data);
}

void DataManager::setData(std::string key,  int data){
MC_USER->setIntegerForKey(key.c_str(), data);
}

void DataManager::setData(std::string key, float data){
MC_USER->setFloatForKey(key.c_str(), data);
}

void DataManager::setData(std::string key, bool data){
MC_USER->setBoolForKey(key.c_str(), data);
}


/**读取数据**/
std::string  DataManager::getData(std::string key, const char*data){
return MC_USER->getStringForKey(key.c_str(), data);
}

int DataManager::getData(std::string key ,int data){
return MC_USER->getIntegerForKey(key.c_str(), data);
}

float DataManager::getData(std::string key, float data){
return MC_USER->getFloatForKey(key.c_str(), data);
}

bool DataManager::getData(std::string key, bool data){
return MC_USER->getBoolForKey(key.c_str(), data);
}


/**确认存储**/
void DataManager::flush(bool pBool){
MC_USER->flush();
}

//保存音效状态

void DataManager::savePlayMusic(bool IsPause){
RSet("isMusicPause", IsPause);
RFlush;
}

//获取音效状态
bool DataManager::readPlayMusic(){
return RGet("isMusicPause", false);
}

//获取金币数量
int DataManager::getGoldNum(){
return RGet("_GlodNum", 0);
}

//设置金币数量
void DataManager::setGoldNum(int m_GoldNum){
RSet("_GlodNum", m_GoldNum);
RFlush;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值