- 精通Cocos2d-x游戏开发(进阶卷)
- 王永宝
- 1047字
- 2020-11-28 22:36:56
1.1 使用UserDefault
UserDefault是Cocos2d-x提供的一个用于游戏存档的工具类,以Key-Value的形式存储字符串Key对应的各种Value,可以存储bool、int、float、double、字符串以及二进制数据。UserDefault底层的存储使用了XML文件格式,对于二进制数据,是通过base64编码转成字符串之后存储,读取内存数据时,通过base64解码将存储在XML中的base64字符串解析为内存数据。
XML存储的路径位于FileUtils::getInstance()->getWritablePath路径下,getWritablePath会返回一个可写路径,这个路径的位置视操作系统而定,并不是随便哪个路径都可以写入文件。默认的文件名为UserDefault.xml,可以将getWritablePath获得的路径打印出来,然后在该路径下找到存档文件,进行修改。
cpp-tests示例中的UserDefaultTest演示了UserDefault的用法,通过UserDefault::getInstance()获取单例对象,然后调用各种get()、set()方法来进行操作,大多数的get()方法支持传入一个默认值,当不能获取这个Key时,自动写入默认值,并返回这个默认值,如果该Key已经存在,则直接返回该Key对应的值。set()方法可以设置一个Key的值,当调用完set()方法之后,应该再调用一下UserDefault的flush方法来确保写入的内容进入磁盘中(多次set操作对应一次flush操作)。接下来简单了解一下UserDefault提供的接口。
//传入指定的Key,获取一个bool值 bool getBoolForKey(const char* key); //传入指定的Key和默认值,获取一个bool值,如果获取不到,则设置Key为默认值,并返回 默认值 virtual bool getBoolForKey(const char* key, bool defaultValue); //传入指定的Key,获取一个int值 int getIntegerForKey(const char* key); //传入指定的Key和默认值,获取一个int值,如果获取不到,则设置Key为默认值,并返回默 认值 virtual int getIntegerForKey(const char* key, int defaultValue); //传入指定的Key,获取一个float值 float getFloatForKey(const char* key); //传入指定的Key和默认值,获取一个float值,如果获取不到,则设置Key为默认值,并返回 默认值 virtual float getFloatForKey(const char* key, float defaultValue); //传入指定的Key,获取一个double值 double getDoubleForKey(const char* key); //传入指定的Key和默认值,获取一个double值,如果获取不到,则设置Key为默认值,并返 回默认值 virtual double getDoubleForKey(const char* key, double defaultValue); //传入指定的Key,获取一个字符串 std::string getStringForKey(const char* key); //传入指定的Key和默认值,获取一个字符串,如果获取不到,则设置Key为默认值,并返回默 认值 virtual std::string getStringForKey(const char* key, const std::string & defaultValue); //传入指定的Key,获取一个Data值 Data getDataForKey(const char* key); //传入指定的Key和默认值,获取一个Data值,如果获取不到,则设置Key为默认值,并返回 默认值 virtual Data getDataForKey(const char* key, const Data& defaultValue); //设置指定的Key为传入的bool值 virtual void setBoolForKey(const char* key, bool value); //设置指定的Key为传入的int值 virtual void setIntegerForKey(const char* key, int value); //设置指定的Key为传入的float值 virtual void setFloatForKey(const char* key, float value); //设置指定的Key为传入的double值 virtual void setDoubleForKey(const char* key, double value); //设置指定的Key为传入的字符串 virtual void setStringForKey(const char* key, const std::string & value); //设置指定的Key为传入的Data值 virtual void setDataForKey(const char* key, const Data& value); //当调用了setXXXForKey之后,需要调用该方法进行刷新 virtual void flush(); //删除指定的Key virtual void deleteValueForKey(const char* key); //获取单例对象 static UserDefault* getInstance(); //释放单例对象 static void destroyInstance();
具体的实现中,UserDefault使用了tinyxml这个库来进行XML文件的读写操作,对具体细节感兴趣的读者可以自行查看UserDefault的实现。