游戲資源打包


游戲資源打包幾乎是一個網絡游戲客戶端必備的功能。頁游和微端根據實際需求可能不打包資源或者使用小包。

資源打包有這么幾個好處:

1、加快客戶端安裝時間。拷貝3000個1mb文件所消耗的時間要遠大於拷貝一個3g的文件所消耗的時間

2、客戶端更加整潔,也可以“稍微”避免游戲資源被他人使用。

3、ios和android上面可以避免文件名大小寫不一致造成的文件讀取失敗。或者說包內可以做到全平台大小寫無關

4、壓縮資源,如果是大量png等圖片資源可能還體現不出來,但是如果有大量文本和未壓縮模型資源,那么打包可以有效減小客戶端

 

這里介紹兩個開源庫,可以非常方便的給客戶端加入資源打包功能。

1、StormLib(http://www.zezula.net/en/mpq/stormlib.html),這個就是暴雪MPQ打包格式開源實現版本。通過這個庫可以輕易的實現一個PackageManager來加載包內資源

2、ZPack (http://multi-crash.com/?page_id=340)  這個同樣是一個開源打包格式實現。對比上面的MPQ,它更精簡,當然功能也更弱一些。不過現有的一些功能已經完全能滿足我的實際需求了

 

主要特性:

  • 速度
    • 以文件名hash方式檢索,讀取效率至上
    • 刪除包內文件時,只刪除文件索引,不需要移動包內數據
    • 在兩次flush之間用戶可以添加任意多個文件(例如添加整個目錄),這期間除了被添加文件數據的寫入,沒有任何其它多余的文件IO操作
  • 尺寸
    • 添加文件時,優先插入到之前刪除文件留下的空閑位置,盡可能利用空間
    • 用戶可以調用countFragmentSize檢查當前包內空閑空間字節數,必要的話可以調用defrag進行整理以釋放空間
    • 暫不支持數據壓縮,但用戶很容易自行添加壓縮支持
  • 安全/健壯
    • 嚴格保證在用戶調用flush()之前,包文件的有效性。這樣當用戶一次添加/刪除較多文件的過程中即使發生意外(例如停電,進程被強行終止等),包文件能保持最后一次flush后的邏輯結構,不會發生災難性后果
    • 包文件以只讀方式打開時,原始的文件名信息不會被加載到內存。也就是說用戶可以選擇不將原始目錄結構和文件名寫入包內,包文件仍然能正常讀取
  • 可擴展/兼容
    • 從設計上保證當將來需要擴展包文件頭或包內文件索引中的數據時,老的代碼仍能讀取新的數據結構
    • 當數據包和zpEditor版本不一致時,zpEditor仍可以以只讀模式打開數據包
  • 工具
    • 雖然包內文件是以扁平方式組織(以保證檢索效率),但zpack另外提供工具類ZpExplorer,讓用戶可以以樹狀目錄形式瀏覽和編輯包內文件
    • 提供命令行工具,接近dos使用習慣
    • 提供類似windows explorer的編輯器
  • 其它
    • 包文件不受4g大小限制
    • 核心讀取模塊僅依賴c++標准庫,很容易移植到windows以外的平台,例如Linux,Mac,iPhone等
    • 代碼小巧精簡,不提供任何多余接口。zpack核心源代碼僅20k左右

一個打包模塊只要能滿足這么幾個需求就完全夠使用了:

1、hash的平鋪路徑,保證足夠的查找效率

2、支持壓縮

3、安全,健壯,不會因為一些操作造成包損壞

最后感慨下,開源世界太豐富了,多了解一些開源項目就可以省去很多自己重新創造所需要的時間了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM