秦興杰++王坡++董佳駒++詹玲超
摘要:針對(duì)DirectX庫(kù)只有渲染功能,并且該庫(kù)作為渲染庫(kù)并不具有游戲引擎中所需要的各種功能。所以在DirectX庫(kù)的基礎(chǔ)上將其應(yīng)用程序的編程接口封裝到各個(gè)游戲引擎渲染組件里,使該引擎更好的發(fā)揮DirectX庫(kù)的渲染功能。因?yàn)閯?dòng)畫組件和功能組件與DirectX庫(kù)的關(guān)系不大,本文的主要工作在引擎的框架和接口設(shè)計(jì)上。接口就是編程接口,框架借鑒了unity引擎組件+對(duì)象的模式,以此來實(shí)現(xiàn)一個(gè)功能完善、執(zhí)行效率高的基于DirectX庫(kù)的游戲引擎。
關(guān)鍵詞:游戲引擎 DirectX庫(kù) 框架 接口
中圖分類號(hào):TP391.3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2016)12-0182-01
Abstract:The DirectX library only has rendering functions, and the library does not have all the functions needed in the game engine. On the basis of the DirectX library, the application programming interface will be packaged to the various game engine rendering components, so that the engine will play DirectX library rendering function better. Animation component and function component have little relationship with the DirectX library, the main work of this paper is on the frame of the engine and the design of the interface. Interface is the programming interface. Framework draws on the model of the unity engine component + object. So to complete and achieve a game engine based on DirectX with perfect function and high execution efficiency
Key Words:game engine;DirectX library;framework;interface
隨著游戲產(chǎn)業(yè)的發(fā)展,其所依賴的游戲引擎也變的越來越重要。游戲引擎為游戲的開發(fā)提供了關(guān)鍵的技術(shù)框架。一款優(yōu)秀的游戲引擎能夠極大地提高游戲的開發(fā)效率和游戲的健壯性。為此掌握游戲行業(yè)的核心技術(shù),降低游戲行業(yè)的門檻,加強(qiáng)對(duì)于游戲引擎核心技術(shù)的研究,學(xué)習(xí)并開發(fā)一個(gè)全功能的、簡(jiǎn)單的游戲引擎就顯得非常有必要。本文基于DirectX庫(kù)的游戲引擎的開發(fā)提出了一套系統(tǒng)的框架和接口設(shè)計(jì)。在研究比較了許多成熟的游戲引擎后,最后借鑒了Unity引擎的組件+對(duì)象的框架模式。只有好的框架還遠(yuǎn)遠(yuǎn)不夠,為了保證游戲引擎內(nèi)容數(shù)據(jù)和接口的隱藏性,同時(shí)保證游戲引擎的可拓展性,設(shè)計(jì)了動(dòng)態(tài)連接庫(kù)式的接口。
1 DirectX開發(fā)庫(kù)介紹
DirectX是微軟公司針對(duì)Windows操作系統(tǒng)的非實(shí)時(shí)性而推出的一個(gè)開發(fā)庫(kù),目的是讓圖形圖像、動(dòng)畫、多媒體和游戲程序開發(fā)人員在Windows環(huán)境下很容易地編制高級(jí)程序。DirectX包含許多功能,應(yīng)用程序可以通過使用DirectX API來訪問這些新功能。DirectX包含一組API函數(shù),通過它能訪問高性能硬件的高級(jí)功能,如三維圖形加速芯片和聲卡。這些API控制低級(jí)功能、支持輸入設(shè)備和控制著混音及聲音輸出。
2 框架描述
無論做什么,效率總是很重要的,為此借鑒了Unity引擎組件+對(duì)象的框架模式。在該框架模式中一個(gè)對(duì)象表示該對(duì)象在三維空間中的位置,并且確定與別的對(duì)象之間的關(guān)系,可以是某對(duì)象的父或者子對(duì)象,如果是A對(duì)象的父對(duì)象,那么自己在三維空間中變換時(shí),如移動(dòng)、旋轉(zhuǎn)、縮放等,A對(duì)象要跟著自己變換。相反如果是A對(duì)象的子對(duì)象,自己變換時(shí)A對(duì)象沒有任何變化。A對(duì)象變換是,自己將會(huì)變換。除此外該對(duì)象沒有任何具體功能。如果該對(duì)象需要實(shí)現(xiàn)具體的功能則需要添加對(duì)應(yīng)的功能組件。如該對(duì)象需要被顯示則可以添加網(wǎng)格渲染組件,如該對(duì)象需要具有物理碰撞效果則可以添加物理組件。
該框架模式最大的亮點(diǎn)是腳本模塊的實(shí)現(xiàn),上述組件是固定功能,在游戲引擎編寫完成后,使用者無法對(duì)組件功能進(jìn)行更改。為了拓展組件功能,讓使用者自由編寫具體的功能組件,設(shè)計(jì)實(shí)現(xiàn)了腳本模塊。為此先設(shè)計(jì)了一個(gè)名叫DreamBehavior的基類,在該類里聲明了若干的虛函數(shù),如Update函數(shù),該函數(shù)將在每一幀畫面被調(diào)用一次。然后使用者聲明一個(gè)新類繼承DreamBehavior基類并重寫這些函數(shù),最后把這個(gè)新類作為組件綁定到對(duì)應(yīng)的對(duì)象上,就可以實(shí)現(xiàn)用戶自定義功能組件,可以實(shí)現(xiàn)更多的功能。使用該框架模式,讓游戲引擎的使用和開發(fā)都變的相對(duì)容易,結(jié)構(gòu)相對(duì)清晰,十分便于理解。
3 接口設(shè)計(jì)
為了進(jìn)一步提高游戲引擎的效率,同時(shí)保證游戲引擎內(nèi)容數(shù)據(jù)及接口的隱藏性和游戲引擎的可拓展性,一個(gè)好的接口設(shè)計(jì)顯得尤為重要。故設(shè)計(jì)了接口部分,并考慮游戲引擎實(shí)現(xiàn)期間接口的封裝性、重用性。最后設(shè)計(jì)了一個(gè)靈活的接口,如圖1所示。
從圖1中可得所有的組件類繼承于BaseCom基組件類,基組件類里實(shí)現(xiàn)了大量組件需要用到的共同功能和共同數(shù)據(jù)。同樣GameObject類作為對(duì)象類的基類、Camera類、Light類等對(duì)象都繼承該基類,該基類里也有所有對(duì)象類共同需要的功能和數(shù)據(jù),避免每個(gè)對(duì)象類都實(shí)現(xiàn)相同的功能。同時(shí)組件類只有在對(duì)象類中被使用才能實(shí)現(xiàn)功能。這樣的接口設(shè)計(jì),清晰簡(jiǎn)潔,十分方便后期的維護(hù)以及功能的增加。
4 結(jié)語
游戲引擎的開發(fā)是一個(gè)巨大的工程,代碼成千上萬。為完全實(shí)現(xiàn)其基本的功能,一開始如果沒有清晰的總體框架,那么在開發(fā)過程中隨著設(shè)計(jì)的復(fù)雜度增加,實(shí)現(xiàn)或者更改功能將變得越來越復(fù)雜。所以在開始設(shè)計(jì)實(shí)現(xiàn)功能前就需要有一個(gè)大概的框架結(jié)構(gòu)。對(duì)于接口,根據(jù)上述設(shè)計(jì)將被編譯成動(dòng)態(tài)連接庫(kù)的形式提供給開發(fā)者,這樣就實(shí)現(xiàn)了應(yīng)用代碼與引擎代碼的無關(guān)性,能讓開發(fā)者更好的關(guān)注游戲的實(shí)現(xiàn),而不需要關(guān)心游戲的實(shí)現(xiàn)原理。同時(shí)也方便設(shè)計(jì)后期的更新,如果有新的功能,只需要替換動(dòng)態(tài)連接庫(kù),只要保持接口的一致性,開發(fā)者幾乎可以不用修改代碼,即可對(duì)游戲引擎不同的版本使用??蚣艿耐瓿山酉聛砭褪怯螒蛞娴膶?shí)現(xiàn),這里只是為了突出框架設(shè)計(jì)在游戲引擎開發(fā)過程中的重要性。
參考文獻(xiàn)
[1]Jason Gregory.游戲引擎架構(gòu)[M].北京:電子工業(yè)出版社,2014.
[2]Frank D.Luna.DIRECTX 9.0 3D游戲開發(fā)編程基礎(chǔ)[M].北京:清華大學(xué)出版社,2012.
[3]Jim Adams.DirectX高級(jí)動(dòng)畫制作[M].重慶:重慶大學(xué)出版社,2013.
[4]金守榮.國(guó)際游戲場(chǎng)景設(shè)計(jì)[M].北京:中國(guó)青年出版社,2014.
[5]Andre LaMothe.WINDOWS游戲編程大師技巧[M].北京:中國(guó)電力出版社,2014.