J2ME手機游戲引擎程序架構(gòu)
本文向大家簡單介紹一下J2ME手機游戲引擎程序架構(gòu),在游戲開發(fā)以及任何軟件的設(shè)計都需要建立一個穩(wěn)定的引擎結(jié)構(gòu)體,來作為軟件設(shè)計的基本架構(gòu),是軟件體系結(jié)構(gòu)的核心支撐框架。
J2ME手機游戲引擎程序架構(gòu)
在游戲開發(fā)以及任何軟件的設(shè)計都需要建立一個穩(wěn)定的引擎結(jié)構(gòu)體,來作為軟件設(shè)計的基本架構(gòu),是軟件體系結(jié)構(gòu)的核心支撐框架,一切功能的實現(xiàn)以及擴展都在這個基礎(chǔ)架構(gòu)之上來完成。一個游戲的設(shè)計涉及到游戲控制、角色、游戲場景、道具、游戲聲效以及游戲過程事件監(jiān)聽機制等元素,因此建立良好的游戲引擎能對以上各元素進行有效的控制。本文介紹在J2ME游戲設(shè)計中游戲引擎的基本程序架構(gòu)。
游戲引擎可以建立不同的結(jié)構(gòu)體來實現(xiàn),但是任何游戲的設(shè)計都離不開通過設(shè)計一個主循環(huán)loop來重復(fù)控制整個游戲過程,當(dāng)然整個游戲的核心結(jié)構(gòu)(背景幻化控制、精靈坐標(biāo)變化、動作幀畫面變化等)都包含在該循環(huán)中。在J2ME游戲設(shè)計中,程序架構(gòu)一般需要建立兩個核心類,即是MIDlet跟Displayable兩類。
1、其中MIDlet是J2ME的主類,任何程序主類都需要繼承MIDlet來控制整個游戲的生命周期,需要覆蓋MIDlet中的三個周期方法startApp、pauseApp跟destoryApp,分別為執(zhí)行開始、暫停、結(jié)束等動作的操作體。
- public class Game Testextends MIDlet
- implements CommandListener{
- /**
- *游戲引擎介紹
- */
- privateCommandexitCommand;
- privateGameCanvasTestgameCanvas;
- publicGameTest(){
- exitCommand=newCommand("exit?,command.exit,1);
- GameCanvasTestgameCanvas=newGameCanvasTest(this);
- sfcan.addCommand(exitCommand);
- sfcan.setCommandListener(this);
- Display.getDisplay(this).setCurrent(gameCanvas);
- //TODO自動生成構(gòu)造函數(shù)存根
- }
- protectedvoidstartApp()
- throwsMIDletStateChangeException{
- //TODO自動生成方法存根
- //gameCanvas.thread.start();
- }
- protectedvoidpauseApp(){
- //TODO自動生成方法存根
- try{
- gameCanvas.thread.wait();
- }catch(Exceptione){}
- }
- protectedvoiddestroyApp(booleanarg0)
- throwsMIDletStateChangeException{
- //TODO自動生成方法存根
- gameCanvas=null;
- }
- publicvoidcommandAction(Commandc,Displayabled){
- if(c==exitCommand){
- notifyDestroyed();
- }
- }
- //實現(xiàn)游戲過程界面跟不同操作變化的調(diào)度
- publicvoidchangeTale(inttaleIndex)
- {
- 具體代碼實現(xiàn).......
- Display.getDisplay(this).setCurrent(....);
- }
- }
GameTest類繼承了MIDlet類,實現(xiàn)游戲生命周期的控制,而且也僅僅對游戲生命周期的控制跟游戲過程中的UI調(diào)度工作,而把具體的游戲核心模塊放到GameCanvasTest類中去實現(xiàn)。#p#
2、Displayable是游戲的顯示效果核心,在J2ME游戲設(shè)計中使用GameCanvas類完成游戲畫布工作,設(shè)計類繼承GameCanvas來實現(xiàn)游戲核心模塊,通常將游戲主循環(huán)放置于該類中實現(xiàn)整個游戲的控制,因此在繼承GameCanvas的同時還需要實現(xiàn)循環(huán)Runnable接口。
- public class Game Canvas Test extends Game
- Canvas implements Runnable{
- //聲明變量.......
- publicGameCanvasTest(MIDletmidlet)
- {
- super(true);
- //初始化變量.......
- }
- publicvoidrun(){
- keyPressed(getKeyStates());
- spritePixel();
- drawCanvas();
- //其他方法以及處理.......
- }
- protectedvoidkeyPressed(intkeyCode){
- //按鍵處理.......
- }
- publicvoidspritePixel(){
- //精靈以及地圖坐標(biāo)變幻控制......
- }
- publicvoiddrawCanvas(){
- //根據(jù)坐標(biāo)變化重繪畫面處理........
- }
- }
GameCanvasTest類中完成了游戲主干部分,包括鍵盤按鍵事件處理、坐標(biāo)變化、畫面重繪,當(dāng)然游戲精靈跟地圖背景也在該類中定義,并使用LayerManager進行管理。
以上是一般的游戲架構(gòu),當(dāng)然,在較復(fù)雜的游戲設(shè)計里面,使用以上架構(gòu)將會較麻煩,使得程序不清晰。因此在程序設(shè)計中可以采用MVC模式來構(gòu)建游戲引擎,將各部分抽象出來不同的層(分別為UI顯示、線程控制以及輸入監(jiān)控等調(diào)度、精靈等游戲具體模型)去完成各自的功能,從而提高軟件的可讀性跟可維護性。
【編輯推薦】