日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cocos2dX 之数据存储

發(fā)布時(shí)間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cocos2dX 之数据存储 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天我們來看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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。