您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx:数据存储-UserDefault

2014-03-22 18:07 197 查看
游戏中一些比较简单的数据可以使用UserDefault来保存,它的存储方式为xml文件格式。

UserDefault定义如下所示:

/**

* UserDefault acts as a tiny database. You can save and get base type values by it.

* For example, setBoolForKey("played", true) will add a bool value true into the database.

* Its key is "played". You can get the value of the key by getBoolForKey("played").

*

* It supports the following base types:

* bool, int, float, double, string

*/

class CC_DLL UserDefault

{

public:

// get value methods

/**

@brief Get bool value by key, if the key doesn't exist, a default value will return.

You can set the default value, or it is false.

* @js NA

*/

bool getBoolForKey(const char* pKey);

/**

* @js NA

*/

bool getBoolForKey(const char* pKey, bool defaultValue);

/**

@brief Get integer value by key, if the key doesn't exist, a default value will return.

You can set the default value, or it is 0.

* @js NA

*/

int getIntegerForKey(const char* pKey);

/**

* @js NA

*/

int getIntegerForKey(const char* pKey, int defaultValue);

/**

@brief Get float value by key, if the key doesn't exist, a default value will return.

You can set the default value, or it is 0.0f.

* @js NA

*/

float getFloatForKey(const char* pKey);

/**

* @js NA

*/

float getFloatForKey(const char* pKey, float defaultValue);

/**

@brief Get double value by key, if the key doesn't exist, a default value will return.

You can set the default value, or it is 0.0.

* @js NA

*/

double getDoubleForKey(const char* pKey);

/**

* @js NA

*/

double getDoubleForKey(const char* pKey, double defaultValue);

/**

@brief Get string value by key, if the key doesn't exist, a default value will return.

You can set the default value, or it is "".

* @js NA

*/

std::string getStringForKey(const char* pKey);

/**

* @js NA

*/

std::string getStringForKey(const char* pKey, const std::string & defaultValue);

/**

@brief Get binary data value by key, if the key doesn't exist, a default value will return.

You can set the default value, or it is null.

* @js NA

* @lua NA

*/

Data getDataForKey(const char* pKey);

/**

* @js NA

* @lua NA

*/

Data getDataForKey(const char* pKey, const Data& defaultValue);

// set value methods

/**

@brief Set bool value by key.

* @js NA

*/

void setBoolForKey(const char* pKey, bool value);

/**

@brief Set integer value by key.

* @js NA

*/

void setIntegerForKey(const char* pKey, int value);

/**

@brief Set float value by key.

* @js NA

*/

void setFloatForKey(const char* pKey, float value);

/**

@brief Set double value by key.

* @js NA

*/

void setDoubleForKey(const char* pKey, double value);

/**

@brief Set string value by key.

* @js NA

*/

void setStringForKey(const char* pKey, const std::string & value);

/**

@brief Set binary data value by key.

* @js NA

* @lua NA

*/

void setDataForKey(const char* pKey, const Data& value);

/**

@brief Save content to xml file

* @js NA

*/

void flush();

/** returns the singleton

* @js NA

* @lua NA

*/

static UserDefault* getInstance();

/**

* @js NA

*/

static void destroyInstance();

/** deprecated. Use getInstace() instead

* @js NA

* @lua NA

*/

CC_DEPRECATED_ATTRIBUTE static UserDefault* sharedUserDefault();

/**

* @js NA

*/

CC_DEPRECATED_ATTRIBUTE static void purgeSharedUserDefault();

/**

* @js NA

*/

const static std::string& getXMLFilePath();

/**

* @js NA

*/

static bool isXMLFileExist();

private:

UserDefault();

~UserDefault();

static bool createXMLFile();

static void initXMLFilePath();

static UserDefault* _userDefault;

static std::string _filePath;

static bool _isFilePathInitialized;

};

使用如下:

UserDefault::getInstance()->setStringForKey("key","value"); //添加一个字符串数据到指定key下,UserDefault::getInstance()如果是第一次调用则会自动生成一个UserDefault.xml文件,该文件用以保存所有的UserDefault中的数据,UserDefault中的数据是以key-value的方式来存储的

UserDefault::getInstance()->getStringForKey("key","default value");//读取指定key的数据,如不存在该数据则返回指定的默认值"default value"

UserDefault::isXMLFileExist();//用以判断是否已经存在UserDefault.xml文件

如果嫌弃调用时代码过长,可以使用宏,如

#define SaveStringToXML UserDefault::getInstance()->setStringForKey

#define LoadStringFromXML UserDefault::getInstance()->getStringForKey

...

#define SaveBooleanToXML UserDefault::getInstance()->setBoolForKey

#define LoadBooleanFromXML UserDefault::getInstance()->getBoolForKey

有时需要判断是否首次运行/生成某些数据,可使用一个boolean值来进行记录,如
if(LoadBooleanFromXML("first_time",true))

{

//进行所需的首次加载操作

SaveBooleanToXML ("first_time",false);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: