一種基于Android的手機2D游戲引擎的制作方法
【技術(shù)領(lǐng)域】
:
[0001]計算機科學(xué)與技術(shù);
【背景技術(shù)】
:
[0002]本發(fā)明涉及到的技術(shù):Android多屏幕適配技術(shù)、Android動畫技術(shù)、Android圖像處理技術(shù)等。
【發(fā)明內(nèi)容】
:
[0003]本發(fā)明設(shè)計了手機游戲開發(fā)所需要的游戲引擎的各個模塊。針對2D動畫冗余的問題,結(jié)合Flash提供的XFL文檔,提出了一種解決2D動畫冗余的方法。針對Android上圖像縮放模糊和系統(tǒng)硬件限制的問題,改進了基于梯度最小準(zhǔn)則的線性插值修正算法,在原算法的基礎(chǔ)上引入了相鄰像素相關(guān)性判斷,以保留像素邊緣信息的高頻分量。本引擎具有能夠提高游戲開發(fā)效率、減少游戲所需資源、提高圖像縮放的顯示效果的功能。
【附圖說明】
:
[0004]附圖1為游戲引擎功能模塊圖。
[0005]附圖2為游戲的整個運行狀態(tài)圖。
[0006]附圖3 為 GameActivity 類圖。
[0007]附圖4為游戲整體邏輯時序圖。
[0008]附圖5為游戲場景管理模塊類關(guān)系圖。
[0009]附圖6為整個動畫去冗余過程。
【具體實施方式】
:
[0010]為實現(xiàn)游戲引擎的功能需求,將游戲引擎分成不同的模塊有助于各個模塊的相互獨立以及以后功能的擴充,游戲引擎Idoodle的整個功能模塊劃分如附圖1。其顯示了游戲引擎主要由場景管理模塊、動畫管理模塊、圖像顯示模塊、資源管理模塊、事件響應(yīng)模塊、整體邏輯控制模塊組成。
[0011]場景管理模塊:該模塊提供游戲?qū)嶓w場景的管理,為各個場景分發(fā)事件響應(yīng)以及繪圖命令。
[0012]動畫管理模塊:負(fù)責(zé)動畫資源文件的解析、動畫的生成以及動畫的靈活控制。該模塊為開發(fā)人員使用2D幀動畫提供了簡單操作。
[0013]圖像顯示模塊:該模塊負(fù)責(zé)渲染線程的管理以及OpenGL ES繪圖函數(shù)的封裝。主要處理游戲中圖像的繪制,包括建立OpenGL ES的引用對象,提供渲染線程與Π線程的同步,建立繪圖精靈和網(wǎng)格繪制圖像。
[0014]資源管理模塊:負(fù)責(zé)對Android手機的各類資源文件包括圖片資源文件、聲音資源文件等的加載和操作提供方便的處理。
[0015]事件響應(yīng)模塊:負(fù)責(zé)Android系統(tǒng)的各種事件的管理并提供相應(yīng)的處理,包括按鍵事件、滑動事件,傳感器事件的處理。
[0016]整體邏輯控制模塊:負(fù)責(zé)組織各個模塊,將模塊組織起來協(xié)調(diào)工作。
[0017]整體邏輯控制模塊管理整個游戲體的響應(yīng)和交互。游戲體,是對游戲自身的抽象,它包括對游戲狀態(tài)及其狀態(tài)轉(zhuǎn)換規(guī)則的抽象,它還包括對游戲運行邏輯的抽象。游戲一旦被啟動,除游戲結(jié)束或暫停操作外,游戲一直處于運行狀態(tài)并不斷的循環(huán)重復(fù)著相同的動作。
[0018]附圖2為游戲的整個運行狀態(tài)圖。游戲的主要狀態(tài)有啟動態(tài)、運行態(tài)、暫停態(tài)、停止態(tài)。為了良好地管理游戲的各個狀態(tài),本發(fā)明設(shè)計的整體邏輯控制由GameActivity類進行控制,該類繼承于Activity并且包含了游戲的圖像渲染類GameGraphics,文件處理類GameFiles,事件處理類Gamelnput,聲音管理類GameAud1,游戲監(jiān)聽接口 GameListener。Activity是Android提供的四大組件之一,其中的抽象方法onStart O , onPause O等提供了游戲的各個狀態(tài)的響應(yīng)接口。
[0019]附圖3為顯示了 GameActivity類與其它主要類的關(guān)系。GameActivity繼承于Activity,是游戲程序的創(chuàng)建入口 ;GameGraphics用于創(chuàng)建圖像的渲染線程以及封裝基于OpenGL ES相關(guān)的繪圖函數(shù),以提供便利的繪制接口 ;GameAud1是用于管理Android設(shè)備音頻的播放,提供簡單的音頻調(diào)用接口 ;GameFiles用于引用Android設(shè)備創(chuàng)建的文件句柄,通過該類來管理和加載存放在Android設(shè)備不同位置的文件,對文件的操作提供了簡潔的調(diào)用方式;Gamelnput用于處理Android設(shè)備事件的響應(yīng)操作,以提供各個場景對事件的響應(yīng)處理;GameListener用于創(chuàng)建游戲的實體部分,提供游戲?qū)嶓w部分的入口以及游戲各個場景的管理,是對游戲?qū)嶓w的抽象。
[0020]GameActivity 中成員函數(shù) initiai ize (GameListener listener)接受一個游戲?qū)嶓w的對象參數(shù)并在函數(shù)的內(nèi)部對各個模塊對象的創(chuàng)建,創(chuàng)建這些對象后作為一個引用標(biāo)識存在,以提供外部游戲?qū)嶓wGameListener的調(diào)用。其中,graphics對象用于圖像渲染的繪制,graphics 是實現(xiàn)了 Renderer 接口 的對象,Renderer 是 Android 用于 GLSurfaceView以便訪問OpenGL ES的APl所提供的公共接口。GLSurfaceView是Android提供的一個用于在非Π線程中進行渲染的視圖類,因此graphics實際是由UI線程創(chuàng)建的一個獨立邏輯渲染線程對象。
[0021]附圖4為游戲整體邏輯時序圖,表示了游戲開發(fā)者從創(chuàng)建游戲到游戲主體運行的時序關(guān)系。對圖中的各個邏輯消息解釋如下:
[0022]消息1:通過繼承于Activity的GameActivity創(chuàng)建游戲,GameActivity對象在游戲的Π線程中。
[0023]消息2:在UI線程中創(chuàng)建一個游戲的實體對象,該對象是用戶進行游戲邏輯世界維護和組織的邏輯抽象的實現(xiàn),提供了游戲中的各種場景的管理。
[0024]消息3:在創(chuàng)建游戲的實體對象后,創(chuàng)建游戲所需要的圖形渲染對象、游戲文件操作對象、游戲聲音操作對象、以及游戲的事件處理對象。圖形渲染對象提供了專門的渲染線程進行繪圖,這樣可以防止Android系統(tǒng)在UI線程中進行大量圖像繪制的時候,出現(xiàn)游戲等待的假死現(xiàn)象。
[0025]消息4:圖像渲染對象在surfaceCreate的時候會調(diào)用GameListener類的實體對象進行資源的加載。
[0026]消息5:游戲?qū)嶓w對象通過游戲文件對象加載文件資源如圖片資源,文本文件資源、_■進制文件等。
[0027]消息6:游戲?qū)嶓w對象通過聲音操作對象加載相應(yīng)的聲音文件。
[0028]消息7:圖像渲染對象接受設(shè)備的輸入事件,在渲染線程的onFrame O函數(shù)中處理隊列事件中的事件。
[0029]消息8:圖像渲染對象將事件的處理分發(fā)到游戲?qū)嶓w對象的各個場景進行處理,各個場景處理完自身的事件后進行統(tǒng)一的更新操作。
[0030]消息9:游戲?qū)嶓w對象的狀態(tài)進行更新后,圖像渲染對象調(diào)用游戲?qū)嶓w對象的繪圖函數(shù)進行圖像的繪制,顯示到屏幕上。
[0031]游戲運行過程中不斷的重復(fù)消息7-9過程,來完成游戲的實時響應(yīng)以及顯示。開發(fā)人員只需要管理游戲?qū)嶓w對象,完成游戲中各個場景的內(nèi)部處理,調(diào)用資源管理接口進行資源的加載,事件響應(yīng)的處理,調(diào)用相應(yīng)的繪圖函數(shù)接口進行繪制圖像等就可以對游戲進行良好的控制和實現(xiàn)。
[0032]游戲場景管理模塊負(fù)責(zé)游戲?qū)嶓w部分的各個場景地管理。該模塊是對游戲邏輯世界的管理,負(fù)責(zé)游戲所需資源的加載、游戲世界中各種物體屬性狀態(tài)的維護、游戲世界的各種物體對輸入事件的響應(yīng)等。將游戲世界分成不同的各個場景,有助于維護各自的狀態(tài)以及資源的托管,為游戲開發(fā)者提供清晰的維護思路和簡單的操作方法。
[0033]游戲場景管理模塊類關(guān)系圖如附圖5,MGame是游戲程序的實體類,該類負(fù)責(zé)游戲資源的加載,事件處理和分發(fā),以及各個場景的繪制和管理。該類繼承Ga