本文共 2378 字,大约阅读时间需要 7 分钟。
cocos2d-x学习笔记16:记录存储1:CCUserDefault
CCUserDefalt作为NS UserDefalt类的cocos2d-x实现版本,承担了cocos2d-x引擎的记录实现功能。 - bool getBoolForKey (const char *pKey, bool defaultValue=false)
-
- int getIntegerForKey (const char *pKey, int defaultValue=0)
-
- float getFloatForKey (const char *pKey, float defaultValue=0.0f)
-
- double getDoubleForKey (const char *pKey, double defaultValue=0.0)
-
- std::string getStringForKey (const char *pKey, const std::string &defaultValue="")
-
- void setBoolForKey (const char *pKey, bool value)
-
- void setIntegerForKey (const char *pKey, int value)
-
- void setFloatForKey (const char *pKey, float value)
-
- void setDoubleForKey (const char *pKey, double value)
-
- void setStringForKey (const char *pKey, const std::string &value)
-
- CCUserDefault *save=CCUserDefault::sharedUserDefault();
- save->setBoolForKey("bool_value",true);
- save->setDoubleForKey("double_value",0.1);
- save->setFloatForKey("float_value",0.1f);
- save->setIntegerForKey("integer_value",1);
- save->setStringForKey("string_value","test");
读取也很简单,用对应的get函数即可。但是,我不建议你使用get函数的缺省返回值,尤其是在没有生成存档的时候。 你会发现,如果要设置多存档,必须自己操作,而且代码会变得复杂,容易出错。 对于简单的游戏可以使用 CCUserDefalt,但是对于复杂游戏,可以考虑使用SQLite。 比如,如果你 错写 把一个Integer按Bool读取,是没有错误提示的 我们找到之前的存档记录,用 CCUserDefault:: getXMLFilePath ()可以获得存档位置,打开它 可以看到存档是明文的xml,如果玩家篡改了数据,你无从知晓。这个可以自己增加一个校验,比如crc,哈希之类的。 - if(!档案不存在)
- {
- 使用缺省数据写入存档;
- }
- 读取存档并初始化数据;
这是我在开发时使用的,在没有存档时首先写入一个,然后再读取。这减小了编码量,保证主要流程清晰。 那么如何判断存档不存在呢?我之前想用标准c++的fstream函数,但是如果从CCUserDefalt中用getXMLFilePath获得存档路径的话。如果此时存档文件不存在,就会自动生成一个。所以接下来的判断存档是否存在代码就会失效了。 yanghuiliu的blog中提到了一个方法,我其实不建议使用这种缺省返回值的方式,但是cocos2dx就设计成这样了,所以可以使用这种方法。 - CCUserDefault *save=CCUserDefault::sharedUserDefault();
- if(save->getBoolForKey("isExisted"))
- {
-
- save->setBoolForKey("isExisted",true);
- }
转载地址:http://wpeox.baihongyu.com/