• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            李錦俊(mybios)的blog

            游戲開發 C++ Cocos2d-x OpenGL DirectX 數學 計算機圖形學 SQL Server

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

            公告

            QQ:30743734
            EMain:mybios@qq.com

            常用鏈接

            留言簿(16)

            我參與的團隊

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 371302
            • 排名 - 67

            最新評論

            閱讀排行榜

            評論排行榜

              本人正在準備做一個游戲引擎(你就當我準備產生垃圾好了~呵呵?。?,準備寫文檔,就順便把這篇文章寫出來了,初次發稿,寫得可能不是很好,請多多包涵~謝謝!~~

              資源打包就是將一些零碎資源(如圖片,音樂文件)。打包的好處有哪些呢?

              1、減少碎片。因為WINDOWS的文件管理系統的原因,將這些資源按原樣放在硬盤里,會產生“碎片”。比如1個字節的文件,占用的空間就高達8KB。這樣,資源可以說“膨脹”了。

              2、安全。將這些數據集合起來打包的話,就可以隱藏這些文件,讓用戶不能修改(如果某位高手破解了文件結構并提取出來了的話你當我沒說~)

              我想到的只有這些,如果哪位大蝦認為還可以補充的,請聯系我:)

              好了!我們現在來構造一個結構來儲存這些文件吧!在這里因為我準備寫的是只儲存圖形的游戲引擎,所以我想到的只是圖片的儲存,其他文件的儲存,這里沒有涉及。
              
              我們先構造一個文件頭,這個文件頭描述了一些基本的信息,有長度,文件版本,壓縮類型,還有儲存的圖片總數。現在詳細的說一下,長度就不用說了吧,文件頭的大小。文件版本是給打包工具看的東東,游戲引擎里也可以使用,根據版本來用不同的方法打開文件(不同的結構,或者其他的)。壓縮類型是一個以備擴展用的東東,根據標識來使用不同的壓縮方法解壓縮,在這里可以選一個速度和容量折中的壓縮方法。圖片總數說的不是單個圖片的總數,而是靜態圖片和動態圖片的總數,靜態圖片可以理解成一個圖片,動態圖片就是一系列靜態圖片的集合,這個在后面會說到。講一個文件頭就說了這么多話。我講得是太詳細了還是太水了?

              struct FileHeader

              {

              unsigned long headsize; //文件頭長度

              int Version; //文件版本

              int Compress; //壓縮類型

              int AllNumber; //圖片總數

              }

              然后緊跟一個結構數組,這個結構描述了每個圖片的起始偏移量,這個偏移量是以文件頭的長度+索引結構數組的長度+1為基址的,還描述了圖片的幀數,為1則表示為靜態圖片,大于1則表示動態圖片(動態圖片很有用處,比如海面,被風吹動的樹,這些就可以很容易的表示出來)

              struct PicIndex

              {

              int offset; //圖片偏移量

              unsigned long PicSize //圖片長度(如果是多幀的則代表這個圖片集的總共長度)

              int nFrameNumber; //圖片幀數

              unsigned long nFrameSize[nFrameNumber]; //每一幀的偏移量,這里的偏移量就是基址+offset+這一個偏移量。。#··%…!天書?

              //當然上面這個數組定義編譯時不能這樣寫

              }

              PicIndex結構是一個數組,它的下標為AllNumber個。例如:

              PicIndex Index[AllNumber];

              然后剩下的就是一些數據了,這些數據已經被壓縮了,壓縮方式通過文件頭的AllNumber變量來獲得。

              

              下標n其實就是AllNumber,這里為了省空間:)

              值得注意的是后面的壓縮數據不是整塊壓縮的,而是單個圖片的壓縮,然后放在一起而已,我這樣做是為了讀取方便,就不用讀取一個數據還要把整個文件再解壓縮一道了,這樣壓縮率可能也會降低,不知道是否還有更好的辦法,如果有,請聯系我~謝謝!

              除了我寫的這種結構方式來儲存文件以外,還有其他的實現方案,但是我覺得這個好一點。

              代碼我剛寫一半,還不完全,所以這里就不放上來了。

              我的QQ:393277421

              我再說一句最重要的話:有空常聯系~~~~~~~~
            posted on 2006-11-19 08:11 李錦俊(mybios) 閱讀(2577) 評論(2)  編輯 收藏 引用 所屬分類: 資源壓縮打包

            Feedback

            # re: 【轉貼】游戲中的資源打包 2008-03-19 19:17 小旋子
            請問 關于某一個格式(即某種壓縮打包算法)的游戲壓縮包 已有一種工具能夠正確提取出其中的文件, 那么是否可以逆向呢?就是可否反過來將某些文件壓縮打包到該游戲的文件中?  回復  更多評論
              

            # re: 【轉貼】游戲中的資源打包 2012-03-13 13:57 lake
            xielianjin@qq.com 有的話發一份研究。3Q  回復  更多評論
              

            欧美伊人久久大香线蕉综合69| 久久国产综合精品五月天| 中文字幕人妻色偷偷久久| 久久婷婷色香五月综合激情| 亚洲国产另类久久久精品小说| 97久久精品国产精品青草| 久久精品无码av| 久久Av无码精品人妻系列| 国产精品狼人久久久久影院| 少妇熟女久久综合网色欲| 久久国产成人精品麻豆| 99久久做夜夜爱天天做精品| 久久er国产精品免费观看2| 久久午夜免费视频| 精品久久久久久无码国产| 一本色综合网久久| 久久天天躁狠狠躁夜夜2020老熟妇 | 久久综合综合久久97色| 久久噜噜久久久精品66| 99国产欧美久久久精品蜜芽| 狠狠色丁香婷婷久久综合| 精品综合久久久久久88小说| 国产亚洲精品美女久久久| 久久久久久久波多野结衣高潮| 九九热久久免费视频| 99久久久精品| 99久久精品国内| 久久99精品久久久久久| 久久精品国产亚洲av麻豆小说 | 久久久一本精品99久久精品88| 91久久九九无码成人网站| 国内精品久久久久久99| 亚洲欧美日韩中文久久| 精品国产乱码久久久久久呢| 久久这里有精品视频| 久久久网中文字幕| 亚洲综合久久久| 久久无码专区国产精品发布 | 久久精品国产乱子伦| 亚洲人成无码网站久久99热国产 | 成人综合久久精品色婷婷|