• <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)

            我參與的團隊

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 370187
            • 排名 - 67

            最新評論

            閱讀排行榜

            評論排行榜

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

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

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

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

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

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

              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) 閱讀(2571) 評論(2)  編輯 收藏 引用 所屬分類: 資源壓縮打包

            Feedback

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

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

            91久久婷婷国产综合精品青草| 精品蜜臀久久久久99网站| 99久久人妻无码精品系列蜜桃| 久久久久亚洲AV成人网人人网站| 久久狠狠爱亚洲综合影院| 久久香综合精品久久伊人| 秋霞久久国产精品电影院| 久久夜色精品国产亚洲av| 亚洲精品乱码久久久久66| 久久久国产一区二区三区| 国内精品久久久久久99| 91精品日韩人妻无码久久不卡 | 97精品依人久久久大香线蕉97| 国产精品久久一区二区三区 | 国产精品久久久天天影视| 欧洲性大片xxxxx久久久| 99久久99久久精品国产片果冻| 无码国内精品久久综合88| 国产午夜精品理论片久久| 91视频国产91久久久| 久久91精品国产91| 久久中文字幕无码专区 | 国产精品一区二区久久精品无码 | 久久久SS麻豆欧美国产日韩| 青青热久久综合网伊人| 亚洲AV日韩精品久久久久久| 久久伊人亚洲AV无码网站| 人人狠狠综合久久亚洲88| 久久久久亚洲AV无码专区体验| 亚洲精品国产字幕久久不卡| 国内精品久久久久久久coent| 久久婷婷国产综合精品 | 久久96国产精品久久久| 日本久久久精品中文字幕| 伊人久久久AV老熟妇色| 无码八A片人妻少妇久久| 武侠古典久久婷婷狼人伊人| 亚洲?V乱码久久精品蜜桃| 欧美久久综合九色综合| 久久99热这里只有精品66| 国产精品久久婷婷六月丁香|