cocos2dX 之数据存储
今天我們來看cocos2dX里面的數(shù)據(jù)存儲(chǔ)類, CCUserDefault, 如今的游戲基本都會(huì)把用戶信息保存下來, 以便于再次進(jìn)入游戲的時(shí)候讀取,?為了方便起見,有時(shí)我們也能夠用CCUserDefault來存儲(chǔ)金幣數(shù)目這樣的簡(jiǎn)單的數(shù)據(jù)項(xiàng), 當(dāng)然, 大型數(shù)據(jù)還是建議使用數(shù)據(jù)庫
閑話不多說, 我們來看看cocos2dX為我們準(zhǔn)備了哪些函數(shù):
setBoolForKey( 鍵值, 值); ? ? ? ? ? ?//設(shè)置一個(gè)bool值
setStringForKey( 鍵值, 值); ? ? ? ? //設(shè)置一個(gè)string值
setDoubleForKey( 鍵值, 值); ? ? ? ?//設(shè)置一個(gè)double值
setFloatForKey( 鍵值, 值); ? ? ? ? ? //設(shè)置一個(gè)float值
setIntegerForKey( 鍵值, 值); ? ? ? ?//設(shè)置一個(gè)int值
getBoolForKey( 鍵值); ? ?//讀取一個(gè)bool值?
getStringForKey( 鍵值); ?//讀取一個(gè)string值
getDoubleForKey( 鍵值);//讀取一個(gè)double值
getFloatForKey( 鍵值); ? ?//讀取一個(gè)float值
getIntegerForKey( 鍵值); //讀取一個(gè)int值
getBoolForKey( 鍵值, 默認(rèn)值); ? ?//讀取一個(gè)bool值
getStringForKey( 鍵值, 默認(rèn)值); ?//讀取一個(gè)string值
getDoubleForKey( 鍵值, 默認(rèn)值);//讀取一個(gè)double值
getFloatForKey( 鍵值, 默認(rèn)值); ? ?//讀取一個(gè)float值
getIntegerForKey( 鍵值, 默認(rèn)值); //讀取一個(gè)int值
flush(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//保存到文件
話說函數(shù)也不是非常多啊, 五種類型, set寫入, get取出, 非常明顯的哈希表結(jié)構(gòu), Key-Valua, Key索引Value的值,
我們先來來寫寫代碼:
CCLabelTTF* ttf = CCLabelTTF::create( "null", "Arial", 32);ttf->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));addChild( ttf, 0, 101);if ( CCUserDefault::sharedUserDefault()->getBoolForKey( "flag", false)){//有數(shù)據(jù)std::string str = CCUserDefault::sharedUserDefault()->getStringForKey( "str", "null"); //取出stringttf->setString( str.c_str()); //將字符串的標(biāo)題設(shè)為str} else{//沒有數(shù)據(jù)CCUserDefault::sharedUserDefault()->setStringForKey( "str", "now, hava data"); //寫入字符串CCUserDefault::sharedUserDefault()->setBoolForKey( "flag", true); //寫入boolCCUserDefault::sharedUserDefault()->flush(); //將數(shù)據(jù)存入xml里面, 只是如今貌似能夠不加也能夠}我們來看看第一次執(zhí)行的效果:
第二次執(zhí)行:
我們?cè)俚巾?xiàng)目里面的Debug.win32以下看看, 是不是多了一個(gè)UserDefault.xml
我們打開這個(gè)文件看看:
非常熟悉吧, 有兩個(gè)數(shù)據(jù):
key: str<====>valua:now, hava data
key:flag<====>valua:true
只是CCUserDefault給我們提供的存儲(chǔ)方式是明文存儲(chǔ), 非常easy被其它人從外部改動(dòng), 所以我們存入xml的時(shí)候最好是加密存儲(chǔ), 所以為了防止玩家改動(dòng)數(shù)據(jù), 我們也寫個(gè)簡(jiǎn)單的加密解密函數(shù):
在頭文件中面定義兩個(gè)函數(shù):
void encode(std::string &str);void decode(std::string &str);實(shí)現(xiàn)他們, 這個(gè), 我沒有研究過加密解密算法, 所以就來個(gè)最簡(jiǎn)單的:
//加密 void HelloWorld::encode(std::string &str) { for(int i = 0; i < str.length(); i++) { int ch = str[i]; ch = ch ^ 1; str[i] = ch; } } //解密 void HelloWorld::decode(std::string &str) { for(int i = 0; i < str.length(); i++) { int ch = str[i]; ch = ch ^ 1; str[i] = ch; } }使用一下, 看看效果先:
( 旁白: 感覺怎么沒有區(qū)別呢? 又忽悠我們?), 別急嘛, 我們看看XML文件:
看看, 你能看懂嗎?
好了, 今天就到這里, 我發(fā)現(xiàn)近期的東西會(huì)不會(huì)是越來越簡(jiǎn)單了啊, 過段時(shí)間給來點(diǎn)有難度的
轉(zhuǎn)載于:https://www.cnblogs.com/jhcelue/p/7137826.html
總結(jié)
以上是生活随笔為你收集整理的cocos2dX 之数据存储的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机和外部通信方式,计算机和外部的通信
- 下一篇: epic堡垒之夜显示服务器离线,堡垒之夜