官术网_书友最值得收藏!

1.1 使用UserDefault

UserDefault是Cocos2d-x提供的一個用于游戲存檔的工具類,以Key-Value的形式存儲字符串Key對應的各種Value,可以存儲bool、int、float、double、字符串以及二進制數據。UserDefault底層的存儲使用了XML文件格式,對于二進制數據,是通過base64編碼轉成字符串之后存儲,讀取內存數據時,通過base64解碼將存儲在XML中的base64字符串解析為內存數據。

XML存儲的路徑位于FileUtils::getInstance()->getWritablePath路徑下,getWritablePath會返回一個可寫路徑,這個路徑的位置視操作系統而定,并不是隨便哪個路徑都可以寫入文件。默認的文件名為UserDefault.xml,可以將getWritablePath獲得的路徑打印出來,然后在該路徑下找到存檔文件,進行修改。

cpp-tests示例中的UserDefaultTest演示了UserDefault的用法,通過UserDefault::getInstance()獲取單例對象,然后調用各種get()、set()方法來進行操作,大多數的get()方法支持傳入一個默認值,當不能獲取這個Key時,自動寫入默認值,并返回這個默認值,如果該Key已經存在,則直接返回該Key對應的值。set()方法可以設置一個Key的值,當調用完set()方法之后,應該再調用一下UserDefault的flush方法來確保寫入的內容進入磁盤中(多次set操作對應一次flush操作)。接下來簡單了解一下UserDefault提供的接口。

        //傳入指定的Key,獲取一個bool值
        bool getBoolForKey(const char* key);
        //傳入指定的Key和默認值,獲取一個bool值,如果獲取不到,則設置Key為默認值,并返回
        默認值
        virtual bool getBoolForKey(const char* key, bool defaultValue);
        //傳入指定的Key,獲取一個int值
        int getIntegerForKey(const char* key);
        //傳入指定的Key和默認值,獲取一個int值,如果獲取不到,則設置Key為默認值,并返回默
        認值
        virtual int getIntegerForKey(const char* key, int defaultValue);
        //傳入指定的Key,獲取一個float值
        float getFloatForKey(const char* key);
        //傳入指定的Key和默認值,獲取一個float值,如果獲取不到,則設置Key為默認值,并返回
        默認值
        virtual float getFloatForKey(const char* key, float defaultValue);
        //傳入指定的Key,獲取一個double值
        double getDoubleForKey(const char* key);
        //傳入指定的Key和默認值,獲取一個double值,如果獲取不到,則設置Key為默認值,并返
        回默認值
        virtual double getDoubleForKey(const char* key, double defaultValue);
        //傳入指定的Key,獲取一個字符串
        std::string getStringForKey(const char* key);
        //傳入指定的Key和默認值,獲取一個字符串,如果獲取不到,則設置Key為默認值,并返回默
        認值
        virtual std::string getStringForKey(const char* key, const std::string &
        defaultValue);
        //傳入指定的Key,獲取一個Data值
        Data getDataForKey(const char* key);
        //傳入指定的Key和默認值,獲取一個Data值,如果獲取不到,則設置Key為默認值,并返回
        默認值
        virtual Data getDataForKey(const char* key, const Data& defaultValue);

        //設置指定的Key為傳入的bool值
        virtual void setBoolForKey(const char* key, bool value);
        //設置指定的Key為傳入的int值
        virtual void setIntegerForKey(const char* key, int value);
        //設置指定的Key為傳入的float值
        virtual void setFloatForKey(const char* key, float value);
        //設置指定的Key為傳入的double值
        virtual void setDoubleForKey(const char* key, double value);
        //設置指定的Key為傳入的字符串
        virtual void setStringForKey(const char* key, const std::string & value);
        //設置指定的Key為傳入的Data值
        virtual void setDataForKey(const char* key, const Data& value);

        //當調用了setXXXForKey之后,需要調用該方法進行刷新
        virtual void flush();
        //刪除指定的Key
        virtual void deleteValueForKey(const char* key);
        //獲取單例對象
        static UserDefault* getInstance();
        //釋放單例對象
        static void destroyInstance();

具體的實現中,UserDefault使用了tinyxml這個庫來進行XML文件的讀寫操作,對具體細節感興趣的讀者可以自行查看UserDefault的實現。

主站蜘蛛池模板: 蓬莱市| 通河县| 洪泽县| 威远县| 积石山| 大兴区| 建昌县| 新闻| 云林县| 太原市| 双城市| 麟游县| 沐川县| 兴隆县| 锡林浩特市| 闽清县| 微博| 湘乡市| 正蓝旗| 东源县| 潼南县| 苍南县| 从江县| 鸡西市| 平远县| 鄂温| 金山区| 康定县| 集安市| 永修县| 招远市| 上饶市| 增城市| 和田市| 铁岭市| 余庆县| 肥乡县| 乐亭县| 涟水县| 山东省| 南汇区|