cocos2d-x学习笔记16:记录存储1:CCUserDefault
生活随笔
收集整理的這篇文章主要介紹了
cocos2d-x学习笔记16:记录存储1:CCUserDefault
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?cocos2d-x學習筆記16:記錄存儲1:CCUserDefault
一、簡述 CCUserDefalt作為NSUserDefalt類的cocos2d-x實現版本,承擔了cocos2d-x引擎的記錄實現功能。
他的接口非常簡單。
在helloworld中增加如下代碼:
然后寫入存檔就完成了。 讀取也很簡單,用對應的get函數即可。但是,我不建議你使用get函數的缺省返回值,尤其是在沒有生成存檔的時候。
二、CCUserDefalt的問題 1.沒有記錄和表的概念 你會發現,如果要設置多存檔,必須自己操作,而且代碼會變得復雜,容易出錯。 對于簡單的游戲可以使用CCUserDefalt,但是對于復雜游戲,可以考慮使用SQLite。
2.沒有數據類型安全 比如,如果你錯寫把一個Integer按Bool讀取,是沒有錯誤提示的
3.沒有存檔數據完整性的校驗 我們找到之前的存檔記錄,用CCUserDefault::getXMLFilePath()可以獲得存檔位置,打開它
可以看到存檔是明文的xml,如果玩家篡改了數據,你無從知曉。這個可以自己增加一個校驗,比如crc,哈希之類的。
三、存檔和游戲初始化的建議流程
一個建議的流程是:
這是我在開發時使用的,在沒有存檔時首先寫入一個,然后再讀取。這減小了編碼量,保證主要流程清晰。
那么如何判斷存檔不存在呢?我之前想用標準c++的fstream函數,但是如果從CCUserDefalt中用getXMLFilePath獲得存檔路徑的話。如果此時存檔文件不存在,就會自動生成一個。所以接下來的判斷存檔是否存在代碼就會失效了。
yanghuiliu的blog中提到了一個方法,我其實不建議使用這種缺省返回值的方式,但是cocos2dx就設計成這樣了,所以可以使用這種方法。
參考文獻: cocos2d-x中保存用戶游戲數據CCUserDefault:http://blog.csdn.net/yanghuiliu/article/details/6912612
?
總結
以上是生活随笔為你收集整理的cocos2d-x学习笔记16:记录存储1:CCUserDefault的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tegra3 vSMP架构Android
- 下一篇: EXCHANGE2O10用户设置外出助理