【cocos2d-x】UserDefault保存数组(ValueVector)

前端之家收集整理的这篇文章主要介绍了【cocos2d-x】UserDefault保存数组(ValueVector)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

今天终于需要用到保存数据了,大家都知道Cocos2dx是OC的C++版本,所以也同样实现了UserDefault,可以使用它来保存一下游戏数据。
这个单例类实现了对基本数据类型的本地化存储,写的时候是将数据写到XML文件中,读是通过XML文件建立一个哈希表,然后通过key取值~
UserDefault的Getter和Setter使用起来都很简单,就不累赘了。

进入正题:

游戏中用到一个数组,需要保存起来,每次打开都从本地读取。但是UserDefault只支持对基础数据类型做存储(有个setDataForKey,搜了一下,只知道是保存二进制值,没有人用过),只能直接写了~
首先想到Value这个类可以进行基础数据类型的转换,例如:Value("123").asInt() 就可以得到123,于是就把数组改写成ValueVector(存放Value的Vector)。
写成一个单例类:
DataCenter.h

#include "cocos2d.h"

USING_NS_CC;

class DataCenter
{
public:
    static DataCenter *getInstance();
    void setValueVectorForKey(ValueVector &vector,const char *key);
    ValueVector getValueVectorByKey(const char *key);
private:
    static DataCenter *_dataCenter;
};

"DataCenter.cpp"

#include "DataCenter.h" #include "string.h" #define splite '|' DataCenter * DataCenter ::_dataCenter = nullptr; DataCenter* DataCenter::getInstance() { if (! _dataCenter) { _dataCenter = new DataCenter(); } return _dataCenter; } void DataCenter::setValueVectorForKey(ValueVector &vector,const char *key) { std::string valueString = ""; for (int i = 0; i < vector.size(); i++) { valueString = valueString + vector.at(i).asString(); if (i != vector.size() - 1) { valueString += splite; } } UserDefault::getInstance() -> setStringForKey(key,valueString); } ValueVector DataCenter::getValueVectorByKey(const char * key) { ValueVector valueVector; std::string valueString = UserDefault::getInstance() -> getStringForKey(key); std::string::iterator i; std::string tmp = ""; for(i = valueString.begin(); i <= valueString.end(); ++i) { if((const char)*i != splite && i != valueString.end()) { tmp += *i; } else { valueVector.push_back(Value(tmp)); tmp = ""; } } return valueVector; }

实现方法

  • 写,遍历数组,拼成一个字符串存起来,使用UserDefault保存起来
  • 读,通过UserDefault读取字符串,把字符串分割成一个数组

使用方法很简单,就不写测试了...

欢迎访问我的博客helkyle.tk

原文链接:https://www.f2er.com/cocos2dx/345266.html

猜你在找的Cocos2d-x相关文章