資源描述:
《一種2d游戲引擎的設(shè)計(jì)與實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、一種2D游戲引擎的設(shè)計(jì)與實(shí)現(xiàn)摘要對(duì)現(xiàn)有游戲引擎開(kāi)發(fā)技術(shù)進(jìn)行改進(jìn),提出了一種有效的2D游戲引擎設(shè)計(jì)與實(shí)現(xiàn)方法,該方法以引擎架構(gòu)為基礎(chǔ),以累積渲染技術(shù)作為主要渲染加速手段;結(jié)合精靈與動(dòng)畫(huà)技術(shù)進(jìn)行具體實(shí)現(xiàn),達(dá)到游戲引擎設(shè)計(jì)的目的。最后通過(guò)該方法實(shí)現(xiàn)了一個(gè)2D游戲引擎,并用實(shí)驗(yàn)驗(yàn)證了該方法的有效性。 1、引言 2D游戲開(kāi)發(fā)是游戲開(kāi)發(fā)領(lǐng)域中一個(gè)不可或缺的重要分支,絕大多數(shù)休閑游戲與動(dòng)漫游戲都是使用2D游戲技術(shù)開(kāi)發(fā)實(shí)現(xiàn)的。2D游戲技術(shù)已經(jīng)成為了手機(jī)及一系列小型設(shè)備游戲開(kāi)發(fā)的主導(dǎo)技術(shù)。游戲引擎是游戲開(kāi)發(fā)的最基礎(chǔ)部分,為此我們提出了一種有效的2D游戲引擎的設(shè)計(jì)與實(shí)現(xiàn)方
2、法。通過(guò)該方法,我們?cè)O(shè)計(jì)并實(shí)現(xiàn)了一款2D游戲引擎。 2、2D游戲引擎核心構(gòu)架 2.1引擎構(gòu)架 引擎構(gòu)架是游戲引擎的骨架,它的任務(wù)就是把圖像渲染、輸入處理、音頻播放、資源管理等游戲引擎的基本功能組合成一個(gè)有機(jī)的整體。目前已經(jīng)有很多比較成熟的引擎架構(gòu)方法包括: (1)結(jié)構(gòu)化構(gòu)架。結(jié)構(gòu)化構(gòu)架采用的方法是將游戲引擎內(nèi)部的模塊以結(jié)構(gòu)化的形式組合,并以API的形式提供接口,這種構(gòu)架模式的優(yōu)點(diǎn)是效率高,接口簡(jiǎn)單清晰,適合于做一些速度要求比較高的引擎,但是缺點(diǎn)是其模塊之間耦合度高,不易修改?! ?2)基類(lèi)根形式構(gòu)架。基類(lèi)根形式構(gòu)架是以基本的幾個(gè)抽象服務(wù)提供接口類(lèi)為
3、基礎(chǔ),并以接口與實(shí)現(xiàn)相分離為原則,來(lái)進(jìn)行引擎實(shí)現(xiàn),提供的實(shí)現(xiàn)類(lèi)在引擎內(nèi)部創(chuàng)建,而將接口供給用戶(hù)使用。這種構(gòu)架模式的優(yōu)點(diǎn)是結(jié)構(gòu)清晰,實(shí)現(xiàn)靈活,可以適應(yīng)比較大的變化,適合于做一些較大且有跨平臺(tái)需求的引擎,但是該架構(gòu)依賴(lài)于基本的抽象類(lèi)的繼承關(guān)系,導(dǎo)致引擎內(nèi)部類(lèi)繼承了無(wú)用的功能而變得虛大,況且接口的通用性使得實(shí)現(xiàn)的效率不高,導(dǎo)致整體效率偏低?! ?3)組件形式構(gòu)架。組件形式構(gòu)架是把不同功能的模塊做成互相獨(dú)立的系統(tǒng),模塊內(nèi)部可以使用任何構(gòu)架方式,只需要提供相應(yīng)的接口即可。引擎以模塊管理器為核心,支持插件形式組件增加方式,可以將新增的功能組件以插件的形式來(lái)插入系統(tǒng)工作
4、,這種構(gòu)架方式極其靈活,且模塊內(nèi)效率比較高,所以某些大型商用游戲引擎采用這種方式,但這種方式設(shè)計(jì)比較困難,實(shí)現(xiàn)比較復(fù)雜,需要大量的開(kāi)發(fā)經(jīng)驗(yàn)。鑒于本文所提引擎開(kāi)發(fā)是以研究為主,且2D游戲要求效率不是很高,我們決定采用結(jié)構(gòu)最為清晰的基類(lèi)根形式構(gòu)架方法。以4個(gè)基本服務(wù)抽象類(lèi)作為整個(gè)引擎底層提供服務(wù)的基礎(chǔ)(如表1)。在基本類(lèi)的基礎(chǔ)上派生出引擎使用的基本類(lèi)結(jié)構(gòu)(見(jiàn)表2)。類(lèi)名功能說(shuō)明IRefCount提供引用計(jì)數(shù)功能ITypeInfomation提供類(lèi)型識(shí)別功能IObjectInfomation提供對(duì)象識(shí)別功能IPersistence提供對(duì)象持久化功能表1基本服務(wù)抽
5、象類(lèi)及功能說(shuō)明類(lèi)名父類(lèi)IBaseITypeInfomationIResourceIBase、IObjectInfomation、ITypeInfomation表2基本類(lèi)結(jié)構(gòu)繼承關(guān)系 其中,IBase類(lèi)是引擎中絕大部分接口類(lèi)的基類(lèi),它實(shí)現(xiàn)了的類(lèi)型識(shí)別虛方法。IResource類(lèi)是引擎中資源的基類(lèi),它在IBase基礎(chǔ)上實(shí)現(xiàn)了引用計(jì)數(shù)和對(duì)象信息功能?! ?.2引擎模塊實(shí)現(xiàn) 為了實(shí)現(xiàn)方便,我們把引擎劃分成7個(gè)功能模塊:core,math,video,system,input,audio,scene?! ?1)core模塊。除了定義了引擎基本類(lèi)及功能以外,還提供
6、了一些基本設(shè)施,例如日志系統(tǒng),異常處理,以及資源管理等?! ?2)math模塊。提供引擎需要的數(shù)學(xué)庫(kù),包括向量,矩陣,基本圖元的定義和實(shí)現(xiàn)功能。 (3)video模塊。負(fù)責(zé)基本圖元的渲染,對(duì)渲染環(huán)境的設(shè)置,對(duì)紋理的創(chuàng)建及加載,以及基本字體渲染?! ?4)system模塊。提供引擎在操作系統(tǒng)下的驅(qū)動(dòng)以及對(duì)操作系統(tǒng)功能使用的封裝,包括窗口管理,定時(shí)器等?! ?5)input模塊。負(fù)責(zé)處理輸入設(shè)備產(chǎn)生的事件,及對(duì)輸入設(shè)備的管理,如對(duì)鍵盤(pán),鼠標(biāo),手柄等的管理。 (6)audio模塊。處理音頻文件的播放以及音效處理等?! ?7)scene模塊。負(fù)責(zé)引擎中的場(chǎng)景管
7、理。 引擎的具體架構(gòu)見(jiàn)圖1?! D1引擎架構(gòu) 3、2D游戲引擎核心渲染技術(shù) 3.1累積渲染技術(shù)簡(jiǎn)介 在2D游戲中,常常將需要的游戲圖像合并到一個(gè)大紋理中,渲染時(shí)使用該紋理進(jìn)行大量圖元渲染。如果一個(gè)一個(gè)渲染所需圖元,引擎的效率必然會(huì)低,但如果一次性大量渲染許多圖元,則效率會(huì)有較大提升。,鑒于2D圖元的簡(jiǎn)單性,我們使用累積渲染技術(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ī)再一次性渲染。
8、一次性渲染是在任何一個(gè)下列條件被滿(mǎn)足之時(shí)進(jìn)行的: (1)2D場(chǎng)景