一種2D游戲引擎的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
一種2D游戲引擎的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
一種2D游戲引擎的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
一種2D游戲引擎的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、一種 2D 游戲引擎的設(shè)計(jì)與實(shí)現(xiàn)摘要對(duì)現(xiàn)有游戲引擎開發(fā)技術(shù)進(jìn)行改進(jìn),提出了一種有效的 2D 游戲引擎設(shè)計(jì)與實(shí)現(xiàn)方法,該方法以引擎架構(gòu)為基礎(chǔ),以累積渲染技術(shù)作為主要渲染加速手段;結(jié)合精靈與動(dòng)畫技術(shù)進(jìn)行具體實(shí)現(xiàn),達(dá)到游戲引擎設(shè)計(jì)的目的。最后通過該方法實(shí)現(xiàn)了一個(gè) 2D 游戲引擎,并用實(shí)驗(yàn)驗(yàn)證了該方法的有效性。1 1、引言2D 游戲開發(fā)是游戲開發(fā)領(lǐng)域中一個(gè)不可或缺的重要分支,絕大多數(shù)休閑游戲與動(dòng)漫游戲都是使用 2D游戲技術(shù)開發(fā)實(shí)現(xiàn)的。2D 游戲技術(shù)已經(jīng)成為了手機(jī)及一系列小型設(shè)備游戲開發(fā)的主導(dǎo)技術(shù)。游戲引擎是游戲開發(fā)的最基礎(chǔ)部分,為此我們提出了一種有效的 2D 游戲引擎的設(shè)計(jì)與實(shí)現(xiàn)方法。通過該方法,我們

2、設(shè)計(jì)并實(shí)現(xiàn)了一款 2D 游戲引擎。2 2、2D2D 游戲引擎核心構(gòu)架2.12.1 引擎構(gòu)架引擎構(gòu)架是游戲引擎的骨架,它的任務(wù)就是把圖像渲染、輸入處理、音頻播放、資源管理等游戲引擎的基本功能組合成一個(gè)有機(jī)的整體。目前已經(jīng)有很多比較成熟的引擎架構(gòu)方法包括:(1)(1)結(jié)構(gòu)化構(gòu)架。結(jié)構(gòu)化構(gòu)架采用的方法是將游戲引擎內(nèi)部的模塊以結(jié)構(gòu)化的形式組合,并以 API 的形式提供接口,這種構(gòu)架模式的優(yōu)點(diǎn)是效率高,接口簡單清晰,適合于做一些速度要求比較高的引擎,但是缺點(diǎn)是其模塊之間耦合度高,不易修改。(2)(2)基類根形式構(gòu)架?;惛问綐?gòu)架是以基本的幾個(gè)抽象服務(wù)提供接口類為基礎(chǔ),并以接口與實(shí)現(xiàn)相分離為原則,來進(jìn)行

3、引擎實(shí)現(xiàn),提供的實(shí)現(xiàn)類在引擎內(nèi)部創(chuàng)建,而將接口供給用戶使用。這種構(gòu)架模式的優(yōu)點(diǎn)是結(jié)構(gòu)清晰,實(shí)現(xiàn)靈活,可以適應(yīng)比較大的變化,適合于做一些較大且有跨平臺(tái)需求的引擎,但是該架構(gòu)依賴于基本的抽象類的繼承關(guān)系, 導(dǎo)致引擎內(nèi)部類繼承了無用的功能而變得虛大, 況且接口的通用性使得實(shí)現(xiàn)的效率不高, 導(dǎo)致整體效率偏低。(3)(3)組件形式構(gòu)架。組件形式構(gòu)架是把不同功能的模塊做成互相獨(dú)立的系統(tǒng),模塊內(nèi)部可以使用任何構(gòu)架方式,只需要提供相應(yīng)的接口即可。引擎以模塊管理器為核心,支持插件形式組件增加方式,可以將新增的功能組件以插件的形式來插入系統(tǒng)工作,這種構(gòu)架方式極其靈活,且模塊內(nèi)效率比較高,所以某些大型商用游戲引擎采

4、用這種方式,但這種方式設(shè)計(jì)比較困難,實(shí)現(xiàn)比較復(fù)雜,需要大量的開發(fā)經(jīng)驗(yàn)。鑒于本文所提引擎開發(fā)是以研究為主,且 2D 游戲要求效率不是很高,我們決定采用結(jié)構(gòu)最為清晰的基類根形式構(gòu)架方法。以 4 個(gè)基本服務(wù)抽象類作為整個(gè)引擎底層提供服務(wù)的基礎(chǔ)(如表 1)。在基本類的基礎(chǔ)上派生出引擎使用的基本類結(jié)構(gòu)(見表 2)。類名功能說明nIRefCount提供引用計(jì)數(shù)功能ITypeInfomation提供類型識(shí)別功能lObjectlnfomation提供對(duì)象識(shí)別功能IPersistence提供對(duì)象持久化功能表 1 基本服務(wù)抽象類及功能說明類名父類IBaseITypeInfomationIResourceIBase

5、、IObjectInfomation、ITypeInfomation表 2 基本類結(jié)構(gòu)繼承關(guān)系其中,舊 ase 類是引擎中絕大部分接口類的基類,它實(shí)現(xiàn)了的類型識(shí)別虛方法。資源的基類,它在舊 ase 基礎(chǔ)上實(shí)現(xiàn)了引用計(jì)數(shù)和對(duì)象信息功能。2.22.2 引擎模塊實(shí)現(xiàn)為了實(shí)現(xiàn)方便,我們把引擎劃分成 7 個(gè)功能模塊:core,math,video,system,input,audio,scene。(1)core 模塊。除了定義了引擎基本類及功能以外,還提供了一些基本設(shè)施,例如日志系統(tǒng),異常處理,以及資源管理等。(2)math 模塊。提供引擎需要的數(shù)學(xué)庫,包括向量,矩陣,基本圖元的定義和實(shí)現(xiàn)功能。(3)v

6、ideo 模塊。負(fù)責(zé)基本圖元的渲染,對(duì)渲染環(huán)境的設(shè)置,對(duì)紋理的創(chuàng)建及加載,以及基本字體渲染。(4)system 模塊。提供引擎在操作系統(tǒng)下的驅(qū)動(dòng)以及對(duì)操作系統(tǒng)功能使用的封裝,包括窗口管理,定時(shí)典堂o(5)input 模塊。負(fù)責(zé)處理輸入設(shè)備產(chǎn)生的事件,及對(duì)輸入設(shè)備的管理,如對(duì)鍵盤,鼠標(biāo),手柄等的管理。(6)audio 模塊。處理音頻文件的播放以及音效處理等。(7)scene 模塊。負(fù)責(zé)引擎中的場(chǎng)景管理。引擎的具體架構(gòu)見圖 1。3 3、2D2D 游戲引擎核心渲染技術(shù)IResource 類是引擎中3.13.1 累積渲染技術(shù)簡介在 2D 游戲中,常常將需要的游戲圖像合并到一個(gè)大紋理中,渲染時(shí)使用該紋理

7、進(jìn)行大量圖元渲染。如果一個(gè)一個(gè)渲染所需圖元,引擎的效率必然會(huì)低,但如果一次性大量渲染許多圖元,則效率會(huì)有較大提升。,鑒于 2D 圖元的簡單性,我們使用累積渲染技術(shù)就可以實(shí)現(xiàn)高效率的對(duì)大批量的圖元進(jìn)行渲染。累積渲染技術(shù)的主要思想就是,在渲染 2D 圖元時(shí),不設(shè)置世界矩陣,而是創(chuàng)建一個(gè)相同的圖元。利用原本的世界矩陣對(duì)此新圖元的頂點(diǎn)直接進(jìn)行變換,并且放入一個(gè)緩沖中,等適當(dāng)?shù)臅r(shí)機(jī)再一次性渲染。一次性渲染是在任何一個(gè)下列條件被滿足之時(shí)進(jìn)行的:(1)2D 場(chǎng)景結(jié)束時(shí)。(2)圖元類型變化。(3)紋理變化。(4)渲染狀態(tài)變化。(5)緩沖滿。(6)更換渲染目標(biāo)(RenderTarget)。3.23.2 與一般渲

8、染技術(shù)的對(duì)比在一般渲染技術(shù)和累積渲染技術(shù)中,處理世界矩陣和渲染方式都有較大的差別。一般渲染技術(shù)在將一個(gè)物體從模型坐標(biāo)轉(zhuǎn)換成世界坐標(biāo)時(shí),需要先設(shè)置世界矩陣,然后對(duì)這個(gè)物體進(jìn)行渲染,這種渲染方式適用于每一個(gè)物體都有比較多的圖元數(shù)據(jù)的 3D 場(chǎng)景。但是對(duì)于 2D 場(chǎng)景來說,這種技術(shù)效率太低。而累積渲染技術(shù)的世界矩陣一直為單位矩陣,在渲染 2D 圖元時(shí)創(chuàng)建一個(gè)相同的新圖元。利用此圖元所需的世界矩陣對(duì)此新圖元的頂點(diǎn)直接進(jìn)行變換,并且放入一個(gè)緩沖中,需要時(shí)再一次性渲染緩沖。3.33.3 累積渲染技術(shù)實(shí)現(xiàn)核心算法算法 1:渲染圖元(render)功能:使用累積渲染技術(shù)對(duì) 2D 圖元進(jìn)行批量渲染輸入:2D 圖

9、元 obj,紋理 tex,世界矩陣 world,渲染緩沖 buffer,渲染設(shè)備 videoDriver輸出:無算法描述:if(一次性渲染條件滿足)/實(shí)現(xiàn)累積渲染 videoDriver-renderBuffer(buffer);buffer-clear();設(shè)置當(dāng)前圖元類型videoDriver-setType(obj-type);設(shè)置當(dāng)前紋理videoDriver-setTexture(tex)endif從當(dāng)前圖元復(fù)制產(chǎn)生新圖元,并對(duì)新圖元進(jìn)行變換,并壓入緩沖newObj=obj此變換改變的是 newObj 的頂點(diǎn)數(shù)據(jù)newObj.transform(world);將定點(diǎn)數(shù)據(jù)放入 buff

10、erbuffer-pushback(newObj);4 4、2D2D 精靈與動(dòng)畫處理在 2D 游戲中,精靈和動(dòng)畫處理是實(shí)現(xiàn)游戲效果的最基本方法,下面就對(duì)它們進(jìn)行簡要的分析。精靈的實(shí)現(xiàn)分析(1)精靈是一個(gè)矩形圖元,其坐標(biāo)分布為:以矩 B B$ $中心為原點(diǎn),四個(gè)頂點(diǎn)分別位于(w/2,h/2),(-w/2,h/2),(w/2,-h/2),(-w/2,-h/2)。(2)精靈通過使用顏色鍵(colorkey)或紋理中的 alpha 通道來實(shí)現(xiàn)圖像透明化。(3)精靈通過指定紋理坐標(biāo)來實(shí)現(xiàn)從組合大紋理中尋址小紋理。(4)精靈使用各種變換(平移,旋轉(zhuǎn),縮放等)在 2D 屏幕坐標(biāo)上面定位渲染,常用平移 T(x

11、,y)來將圖元中心定位于屏幕的(x,y)處。2D2D 動(dòng)畫的實(shí)現(xiàn)分析(1)動(dòng)畫是精靈的擴(kuò)展,靜止的動(dòng)畫與精靈無異,實(shí)現(xiàn)上也大致按照精靈的實(shí)現(xiàn)方法。(2)動(dòng)畫需要一個(gè)動(dòng)作序列,可將紋理按照矩形分塊,然后把分塊編號(hào)與每一個(gè)動(dòng)作需要渲染的幀數(shù)儲(chǔ)存至動(dòng)畫對(duì)象中的動(dòng)作序列。(3)動(dòng)畫的渲染與更新分開成兩個(gè)過程。渲染同精靈一致,即對(duì)當(dāng)前動(dòng)作進(jìn)行渲染,更新即為對(duì)當(dāng)前動(dòng)作與其所剩渲染幀數(shù)進(jìn)行更新。(4)如有必要,可以在一個(gè)動(dòng)畫中定義多個(gè)狀態(tài),每個(gè)狀態(tài)對(duì)應(yīng)一個(gè)動(dòng)作序列,在游戲中可隨時(shí)變換動(dòng)畫的狀態(tài)。5 5、引擎測(cè)試通過以上方法,我們具體實(shí)現(xiàn)了一個(gè) 2D 游戲引擎,并對(duì)引擎的性能進(jìn)行了測(cè)試,測(cè)試表明,引擎的性能非常令人滿意。測(cè)試環(huán)境:Athlon2500+512MRAM+Geforce5200FX在全屏下旋轉(zhuǎn) 3100 個(gè)精靈來進(jìn)行 alpha 混合渲染時(shí),使用累積渲染技術(shù)可以達(dá)到 60.0fps6 6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論