遊戲配置序列化

來源:互聯網
上載者:User

遊戲中提供很多可供配置的設定,有利用適應多種不同的硬體設定,也有利於適應用不同玩家的操作習慣.
如果每次進遊戲的話都要重設一次,這顯然就失去了配置的意義,不如用一個適用範圍比較廣的預設值算了.

所以,配置需要儲存.

windows中就有眾多的的ini檔案,還有一些軟體會把資訊存入註冊表.但是,當配置資訊較多或是對安全性有所考慮時,這就不太適合了.而且,解析ini檔案(或XML)等文字格式設定的配置,也是一件比較麻煩的事.另一種比較方便的方法就是採用二進位儲存,直接把記憶體中的資料轉儲,下次用的時候再重新讀回來,就像XP的休眠功能一樣.

跟其他語言不同,C++本身並沒有提供序列化的支援.不過這也給了我們自由發揮的空間,呵呵

比如,你用一個struct來儲存某些配置:

struct GameConfig
{
   byte x;
   byte y;
}config;

 簡單地儲存到檔案的方法就是直接用流輸出:

using namespace std;
ofstream outfile("config.cfg", ios::out|ios::binary);
if(outfile)
{
     outfile.write( (char*)&config, sizeof(GameConfig) );
     outfile.close();
}

下次直接讀取到結構體裡就可以了:

using namespace std;
ifstream infile("config.cfg", ios::in|ios::binary);
if(infile)
{
    infile.read( (char*)&config, sizeof(GameConfig) );
    infile.close();
}

不過這樣有個缺點,就是一旦結構體改變,存檔資料就沒法用了.所以,檔案頭還需要一些資訊來描術這個設定檔,比如檔案版本,檔案配置數目等等,讀取的時候按byte一個個的讀,這樣就可以相容老的版本資料,做出合適的處理了.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.