程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> J2ME手機游戲引擎程序架構

J2ME手機游戲引擎程序架構

編輯:關於JAVA

在游戲開發以及任何軟件的設計都需要建立一個穩定的引擎結構體,來作為軟件設計的基本架構,是軟件體系結構的核心支撐框架,一切功能的實現以及擴展都在這個基礎架構之上來完成。一個游戲的設計涉及到游戲控制、角色、游戲場景、道具、游戲聲效以及游戲過程事件監聽機制等元素,因此建立良好的游戲引擎能對以上各元素進行有效的控制。本文介紹在J2ME游戲設計中游戲引擎的基本程序架構。

游戲引擎可以建立不同的結構體來實現,但是任何游戲的設計都離不開通過設計一個主循環loop來重復控制整個游戲過程,當然整個游戲的核心結構(背景幻化控制、精靈坐標變化、動作幀畫面變化等)都包含在該循環中。在J2ME游戲設計中,程序架構一般需要建立兩個核心類,即是MIDlet跟Displayable兩類。

1、其中MIDlet是J2ME的主類,任何程序主類都需要繼承MIDlet來控制整個游戲的生命周期,需要覆蓋MIDlet中的三個周期方法startApp、pauseApp跟destoryApp,分別為執行開始、暫停、結束等動作的操作體。

public classGameTest 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 自動生成構造函數存根
}
protected void startApp() throws MIDletStateChangeException {
 // TODO 自動生成方法存根
 //gameCanvas.thread.start();
}
protected void pauseApp() {
 // TODO 自動生成方法存根
 try{
 gameCanvas.thread.wait();
 }catch(Exception e){}
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
 // TODO 自動生成方法存根
 gameCanvas=null;
}
public void commandAction(Command c,Displayable d){
 if(c==exitCommand){ 
 notifyDestroyed();
 }
}
//實現游戲過程界面跟不同操作變化的調度
public void changeTale(int taleIndex)
{
 具體代碼實現.......
 Display.getDisplay(this).setCurrent(....);
}
}

GameTest類繼承了MIDlet類,實現游戲生命周期的控制,而且也僅僅對游戲生命周期的控制跟游戲過程中的UI調度工作,而把具體的游戲核心模塊放到GameCanvasTest類中去實現。

2、Displayable是游戲的顯示效果核心,在J2ME游戲設計中使用GameCanvas類完成游戲畫布工作,設計類繼承GameCanvas來實現游戲核心模塊,通常將游戲主循環放置於該類中實現整個游戲的控制,因此在繼承GameCanvas的同時還需要實現循環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(){
 //精靈以及地圖坐標變幻控制......
}
 public void drawCanvas(){
 //根據坐標變化重繪畫面處理........
}
}
 GameCanvasTest類中完成了游戲主干部分,包括鍵盤按鍵事件處理、坐標變化、畫面重繪,當然游戲精靈跟地圖背景也在該類中定義,並使用LayerManager進行管理。

以上是一般的游戲架構,當然,在較復雜的游戲設計裡面,使用以上架構將會較麻煩,使得程序不清晰。因此在程序設計中可以采用MVC模式來構建游戲引擎,將各部分抽象出來不同的層(分別為UI顯示、線程控制以及輸入監控等調度、精靈等游戲具體模型)去完成各自的功能,從而提高軟件的可讀性跟可維護性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved