<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                本站文章均為[?李華明Himi?](http://www.himigame.com/about-himi)原創,轉載務必在明顯處注明: 轉載自[【黑米GameDev街區】](http://www.himigame.com/)?原文鏈接:?[http://www.himigame.com/iphone-cocos2dx/659.html](http://www.himigame.com/iphone-cocos2dx/659.html "【iOS-cocos2d-X") 上一篇介紹了,如何使用Cocos2dX自帶的CCUserDefault 存儲游戲數據,那么Himi也提到此方式保存的為xml格式并且數據明文顯示=。 =,這個對于我們開發者來說太暴漏了有木有! so~本篇Himi分享如何使用經典Base64算法對CCUserDefault進行數據編碼! OK,關于base64的介紹,Himi不再贅述,還不太熟悉的童鞋請點擊以下連接閱讀: [http://baike.baidu.com/view/469071.htm](http://baike.baidu.com/view/469071.htm)?(百度百科的 base64詳細解釋) 如果對于Cocos2dX自帶的CCUserDefault類不太熟悉的請點擊如下連接: [【iOS-cocos2d-X 游戲開發之五】游戲存儲之Cocos2dX自帶CCUserDefault類詳解;](http://www.himigame.com/iphone-cocos2dx/653.html) 對Base64有了基礎認識后我們就開始進入正題,首先,我們針對Cocos2dX使用c++版的base64編碼文件: base64.h以及base64.cpp ?文件下載導入項目中: [DataBase64Himi.zip](http://www.himigame.com/?dl_id=63)?(647 字節, 11 次) 然后Himi封裝好了兩個函數:(這里我們假設存儲游戲金幣) 首先.h中,定義枚舉變量(備注1) ~~~ enum{ DATA_GOLD,//金幣 }; ~~~ 然后.h定義兩個函數:(備注2) ~~~ //存儲數據 void saveDataByKeyValue(int iKey, string sValue); //讀取數據 int loadDataByKey(int iKey); ~~~ 最后.cpp中函數具體實現代碼:(備注3) ~~~ //存儲 void HelloWorld::saveDataByKeyValue(int iKey, string sValue){ char buffer[32]; sprintf(buffer, "%s%d", "Himi",iKey); CCLog("----------存儲"); CCLog("存儲之前數據 key:index: Himi%i, value: %s ",iKey,sValue.c_str()); string sKey = himiSaveData(reinterpret_cast<const unsigned char*>(sValue.c_str()), sValue.length()); CCLog("存儲編碼后的數據 key:index: Himi%i, value: %s ",iKey,sKey.c_str()); CCUserDefault::sharedUserDefault()->setStringForKey(buffer, sKey); CCUserDefault::sharedUserDefault()->flush(); } //讀取 int HelloWorld::loadDataByKey(int iKey){ CCLog("----------讀取"); char buffer[32]; sprintf(buffer, "%s%d", "Himi",iKey); string s = CCUserDefault::sharedUserDefault()->getStringForKey(buffer); CCLog("解碼前的數據: %s ",s.c_str()); string parseKey = himiParseData(s); CCLog("解碼后的數據: %s ",parseKey.c_str()); return atoi(parseKey.c_str()); } ~~~ OK,這里開始逐步解釋一下: 首先說下備注2,這里定義的兩個方法,第一個函數: ~~~ //存儲數據 void saveDataByKeyValue(int iKey, string sValue); ~~~ 其中第一個函數傳入一個int值,為什么要這樣,原因是這樣方便與結合枚舉變量(備注1)來進行存儲,這樣使用的時候非常簡化你的代碼和步驟;第二個函數是值,這里我封裝成string,這樣為了更好的結合我們的base64編碼!這點在(備注3)中體現! 第二個函數: ~~~ //讀取數據 int loadDataByKey(int iKey); ~~~ 這個函數沒什么好說的,傳入的參數int,枚舉變量即可!至于返回值是int 是方便程序中使用! OK,那么備注3對于兩個封裝函數中的實現需要說明的有3點: 1.將傳入的int值(key)轉化成char*類型,因為cocos2dx中并沒有itoa這樣的方法(原因上一篇有介紹),所以這里我采用 ??char buffer[32]; ? ?sprintf(buffer, “%s%d”, “Himi”,iKey); ?方式進行將int轉化char*類型; 2.存儲的時候我們步驟是:string值進行base64編碼,然后存儲到xml中; 3.將int轉化string的時候我在枚舉變量前加入”Himi”,大家不喜歡可以換成自己喜歡的,但是千萬不要刪除!因為一旦你刪除掉,然后將存儲后的形式為: <1>數據</1> ?這樣會造成你讀取數據出錯! 讀取數據步驟:根據key讀取xml的編碼過的string,然后base64解碼出原始值,最終atoi轉化成int扔出! 這其中應該說沒什么難于理解的,所以這里不再贅述了; 那么下面我們來看這兩個函數如何使用: ~~~ //base64編碼存儲 this->saveDataByKeyValue(DATA_GOLD, "10000"); //base64讀取數據 this->loadDataByKey(DATA_GOLD); ~~~ 代碼是不是用起來很方面呢!哈哈,這就對啦,不能因為編碼弄得亂78糟~OK,運行項目,控制臺你將看到如下顯示: ~~~ Cocos2d: cocos2d: cocos2d-1.0.1-x-0.12.0 Cocos2d: cocos2d: GL_VENDOR: Imagination Technologies Cocos2d: cocos2d: GL_RENDERER: PowerVR SGX 543 Cocos2d: cocos2d: GL_VERSION: OpenGL ES-CM 1.1 IMGSGX543-63.14.2 Cocos2d: cocos2d: GL_MAX_TEXTURE_SIZE: 4096 Cocos2d: cocos2d: GL_MAX_MODELVIEW_STACK_DEPTH: 16 Cocos2d: cocos2d: GL supports PVRTC: YES Cocos2d: cocos2d: GL supports BGRA8888 textures: NO Cocos2d: cocos2d: GL supports NPOT textures: YES Cocos2d: cocos2d: GL supports discard_framebuffer: YES Cocos2d: cocos2d: compiled with NPOT support: NO Cocos2d: cocos2d: compiled with VBO support in TextureAtlas : NO Cocos2d: 此項目已存在保存數據的xml文件 Cocos2d: 存儲之前數據 key:index: 0, value: 10000 Cocos2d: 存儲編碼后的數據 key:index: 0, value: MTAwMDA= Cocos2d: 解碼前的數據: MTAwMDA= Cocos2d: 解碼后的數據: 10000 ~~~ 存儲的文件內容截圖如下: [![](https://box.kancloud.cn/2016-03-31_56fcd021655fd.png "123")](http://www.himigame.com/wp-content/uploads/2012/03/1232.png) OK,最后呢,我要說一點,雖然我們使用base64可以對數據進行編碼,但是對于不懂程序的用戶來說基本無法修改,但是對于稍微有了解base64編碼的童鞋,那么直接可以在線解碼你的這個編碼,所以呢!最后Himi提醒大家,使用base64當中,大家可以書寫一些算法結合base64來使用!這樣即使明文也不怕,至于怎么做,Himi就不再多說了 哈哈! 本篇源碼下載: [base64SaveDataForCocos2dx.zip](http://www.himigame.com/?dl_id=64)(691 字節, 6 次)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看