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

            游戲開(kāi)發(fā) C++ Cocos2d-x OpenGL DirectX 數(shù)學(xué) 計(jì)算機(jī)圖形學(xué) SQL Server

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

            公告

            QQ:30743734
            EMain:mybios@qq.com

            常用鏈接

            留言簿(16)

            我參與的團(tuán)隊(duì)

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 371437
            • 排名 - 67

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

              我們?cè)谑袌?chǎng)上買(mǎi)了一個(gè)游戲,很少會(huì)輕易的看到游戲目錄里一堆的BMP,PCX資源圖片。難道他們不使用BMP之類(lèi)的文件作為圖片資源嗎?非也,其實(shí)他們把這些資源圖片進(jìn)行了打包、壓縮。

              舉幾個(gè)游戲的例子吧,大名鼎鼎westernwood的《紅色警戒》的.mix文件就是一種壓縮包,里面包含了一堆堆的游戲圖片,聲音等資源。還有blizzard的《星際爭(zhēng)霸》、《暗黑破壞神》、《魔獸系列》的.mpq文件也是一種壓縮包,里面包含了各種游戲使用的資源。幾乎所有的游戲都用到了壓縮包。

              那么為什么要使用這種壓縮包呢?原因很多,首先就是壓縮,游戲中使用的圖片等資源都是極其適合壓縮的,這樣就減小了游戲的體積。如果把《紅色警戒2》的資源全部解開(kāi)相信會(huì)超過(guò)3G。其次壓縮后文件體積的減小會(huì)帶來(lái)讀盤(pán)速度的顯著提高。通常一個(gè)2M的BMP文件可以被壓縮到700K以?xún)?nèi),讀取一個(gè)2M的文件和讀取一個(gè)700K的文件然后再內(nèi)存中解壓的速度對(duì)比是可想而知的。最后,將大量的資源文件打包能使得游戲目錄清晰,而不是一堆堆的文件夾和文件,這樣能減少磁盤(pán)空間的浪費(fèi),也減少了磁盤(pán)碎片。

            說(shuō)了那么多壓縮包的好處,我們?cè)谟螒蛑械降自趺词褂脡嚎s包呢?
              1.我們需要定義我們自己的壓縮包文件存儲(chǔ)格式。
              2.根據(jù)1我們寫(xiě)一個(gè)壓縮工具來(lái)對(duì)游戲中的資源進(jìn)行壓縮存儲(chǔ)。
              3.根據(jù)1我們寫(xiě)一個(gè)解壓縮的庫(kù)以便我們游戲中使用。
              4.在游戲的代碼中,我們調(diào)用這個(gè)庫(kù),來(lái)讀取我們包中的文件。

              看到這兒,似乎我們需要做的工作還是很多、很復(fù)雜的。要定義一個(gè)文件結(jié)構(gòu),又要寫(xiě)壓縮工具、還要寫(xiě)解壓庫(kù)。而我們真正使用確實(shí)在最后一步,而且是簡(jiǎn)單的調(diào)用一個(gè)庫(kù)而已。似乎有點(diǎn)得不償失了。好了,我們現(xiàn)在要找一條捷徑來(lái)完成我們游戲使用壓縮包的問(wèn)題,對(duì)于1和2來(lái)說(shuō)其實(shí)很好辦,現(xiàn)成的就有很多壓縮軟件可以生成壓縮包,winzip,winrar,winace ……都是非常好的壓縮工具,這樣我們不用定義壓縮包的存儲(chǔ)格式,也不用編寫(xiě)壓縮工具。不費(fèi)任何力氣就完成了1和2兩步。那么第3步又如何呢?文件存儲(chǔ)格式不是我們?cè)O(shè)計(jì)的,我們無(wú)法知道文件是如何組織、如何壓縮的,跟不用說(shuō)知道如何壓縮了。不過(guò)上網(wǎng)搜索一下,我們還是能得到一些winzip,winrar格式的解壓縮源代碼的。不過(guò)研究起這些代碼來(lái)又是件痛苦的事情,更何況還要用在自己的游戲里。

              到這里,我們又遇到了嚴(yán)峻的考驗(yàn),現(xiàn)在我向大家隆重介紹我們的壓軸法寶:
            MDFile文件系統(tǒng) 。那么,MDFile是個(gè)什么東東呢?MDFile是一個(gè)可擴(kuò)展的文件操作庫(kù),可以用最最簡(jiǎn)單的方法實(shí)現(xiàn)對(duì)任意壓縮包格式內(nèi)文件的讀取。那么到此,我們的3和4也都可以實(shí)現(xiàn)了。下面我們就以MDFile為例來(lái)說(shuō)以下怎么使用它來(lái)讀取我們包中的文件。

              首先我們先獲取我們需要的
            MDFile 庫(kù),到中國(guó)游戲開(kāi)發(fā)技術(shù)咨詢(xún)網(wǎng)上下載 MDFile庫(kù) ,點(diǎn)擊本站原創(chuàng),找到 MDFile 并下載下來(lái)。

              將庫(kù)放到你的工程中,并設(shè)置好,這里我就不詳細(xì)說(shuō)如何設(shè)置一個(gè)外部的庫(kù)了,如果不會(huì)的話(huà)你可以參考相關(guān)的書(shū)。好了,下面我們就開(kāi)始我們的代碼了,這里以讀取test.zip中的一個(gè)test.txt文件為例:

            我們?cè)诔绦蛑刑砑右粋€(gè)LoadFile的函數(shù)來(lái)載入一個(gè)包里的文件。
            bool LoadFile(char* filename,char* packfile)
            {
            ??? BYTE* buf=NULL; // 用來(lái)存放讀取出的文件的內(nèi)容
            ???
            CMD_File cmdfile(“ZipExt.dll”); // 我們先生成一個(gè)實(shí)例
            ???
            cmdfile.Open(“test.zip”,true,true); // 打開(kāi)test.zip這個(gè)壓縮包
            ???
            cmdfile.Locate(“test.txt”); // 定位到test.txt文件
            ???
            buf=new BYTE[cmdfile.GetLength()];// 根據(jù)test.txt的大小分配內(nèi)存
            ???
            cmdfile.Read(buf); // 讀取文件到我們的內(nèi)存中
            ???
            // 至此,buf中已經(jīng)存儲(chǔ)了我們需要的test.zip中的test.txt文件的內(nèi)容了
            ???
            // 是不是很簡(jiǎn)單呢?
            }


            細(xì)心的朋友可能已經(jīng)注意到了,
            CMD_File cmdfile(“ZipExt.dll”);

              這個(gè)初始化是什么意思呢?就是用ZipExt.dll這個(gè)擴(kuò)展庫(kù)來(lái)打開(kāi)我們的test.zip文件,因?yàn)镸DFile本身并不支持Zip格式,他支持內(nèi)部的一種叫epk的壓縮包格式,為了讓他支持Zip你必須獲得ZipExt.dll這個(gè)擴(kuò)展庫(kù),同樣的如果你需要Rar支持你需要獲得RarExt.dll這個(gè)擴(kuò)展庫(kù)。好在我們剛下載的MDFile包中已經(jīng)包括了一個(gè)ZipExt.dll(在Sample\Sample4\Release中),也好在@J--S Studio在不停的開(kāi)發(fā)MDFile的擴(kuò)展庫(kù),以便我們能夠使用更多的壓縮包格式。

              需要一提的是:使用這些現(xiàn)成的壓縮軟件制作文件包雖然簡(jiǎn)單,但是也有很多問(wèn)題,例如安全性,有時(shí)候我們不想被其他人看到游戲中用到的資源,這時(shí)如果我們用的是Zip格式,那就可能輕易的被別人解開(kāi)并修改了。這時(shí),其實(shí)使用MDFile內(nèi)部的epk格式就比較好,他使用動(dòng)態(tài)加密技術(shù),同時(shí)epk格式不被其他壓縮軟件支持,另外他的其他一些特性都是非常不錯(cuò)的。同時(shí)為了支持epk格式,他還提供了一個(gè)JSFilePacker程序用來(lái)打包需要的文件并存成epk格式。所有的這些都可以在我們下載的MDFile中得到。 ? (JSFilePacker在tools下)


              立即下載MDFile庫(kù)
            posted on 2006-11-19 08:16 李錦俊(mybios) 閱讀(3700) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 資源壓縮打包
            少妇无套内谢久久久久| 久久久久久国产a免费观看黄色大片 | 久久青青草原精品国产不卡| 久久精品国产91久久麻豆自制| 亚洲精品97久久中文字幕无码| 久久亚洲熟女cc98cm| 精品熟女少妇a∨免费久久| 一本久久a久久精品综合夜夜| 欧美一级久久久久久久大片| 亚洲精品国产美女久久久 | 久久久久久毛片免费看| 国产精品久久久香蕉| 久久99毛片免费观看不卡| 久久国产视频网| 国产亚洲欧美精品久久久| 天天影视色香欲综合久久| 欧美日韩中文字幕久久伊人| 亚洲中文精品久久久久久不卡| 大香网伊人久久综合网2020| 999久久久国产精品| 久久无码AV一区二区三区| 99久久精品免费| 亚洲国产另类久久久精品黑人 | 人妻少妇久久中文字幕一区二区| 国产69精品久久久久99尤物| 久久精品国产精品亚洲毛片| 亚洲日本va午夜中文字幕久久| 久久精品成人一区二区三区| 99精品国产99久久久久久97| 久久久久久A亚洲欧洲AV冫| 91精品国产综合久久婷婷| 亚洲AV无码久久精品成人| 久久国产劲爆AV内射—百度| 亚洲色欲久久久久综合网| 久久久久久青草大香综合精品| 国内精品久久久久久久久| 久久不射电影网| 国产精品免费久久久久影院 | 伊人久久一区二区三区无码| 久久97久久97精品免视看| 久久精品无码一区二区三区免费|