即興的靈感

          思維是一種藝術(shù); 藝術(shù)需要靈感。

          導(dǎo)航

          公告

           覺悟微智能 白米飯自媒體

          留言簿(29)

          隨筆分類

          隨筆檔案

          相冊(cè)

          閱讀排行榜

          評(píng)論排行榜

          博客好友

          最新評(píng)論

          J2ME手機(jī)游戲引擎程序架構(gòu)

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

          ?(轉(zhuǎn)載時(shí)請(qǐng)注明出處并保持鏈接,作為對(duì)作者辛勤勞動(dòng)的尊重,謝謝。)

          ?
          鳳凰涅槃/浴火重生/馬不停蹄/只爭(zhēng)朝夕
          ???? 隱姓埋名/低調(diào)華麗/簡(jiǎn)單生活/完美人生

          posted on 2009-02-19 14:18 poetguo 閱讀(1736) 評(píng)論(0)  編輯  收藏 所屬分類: J2ME

          主站蜘蛛池模板: 奉新县| 浑源县| 牙克石市| 如东县| 平远县| 洪泽县| 祥云县| 革吉县| 石城县| 云和县| 安康市| 嘉禾县| 平昌县| 太湖县| 得荣县| 平乡县| 泰和县| 三明市| 蕉岭县| 宁河县| 东海县| 巴里| 通化县| 伊川县| 湖南省| 黑水县| 博爱县| 溧阳市| 靖州| 龙里县| 阳新县| 滦平县| 陆良县| 安福县| 紫阳县| 海林市| 万宁市| 伊金霍洛旗| 金乡县| 彰化市| 彭州市|