程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> Java手機游戲編程之MIDP圖形設計篇01

Java手機游戲編程之MIDP圖形設計篇01

編輯:J2ME
 介紹

  本文通過一個簡單的MIDlet游戲程序示例,簡要介紹了MIDlet圖形編程,以期能對開發者深入理解MIDP圖形編程和開發復雜的移動游戲有所幫助。

  一. MIDLET圖形

  1、MIDlet 圖形簡述

  移動信息設備描述(Mobile Information Device Profile ,MIDP)定義了一套應用編程接口(API),用於運行在MIDP容器中的MIDlet應用程序。這套API本身是建立在有限連接設備配置(Connected Limited Device Configuration ,CLDC)應用編程接口的基礎上的。MIDP用戶界面應用編程接口類並不是基於Java抽象窗口工具包(Abstract Window Toolkit ,AWT)設計。它們是專為手機和呼機這樣的小型移動信息設備而設計的,這類設備的特點是只有很小的屏幕和鍵盤。當一個程序員在編寫MIDP圖形應用程序的時候,他可能只能使用MIDP或CLDC應用編程接口。

  MIDP的中心抽象是屏幕,這句話的含義是MIDP的用戶界面設計是基於屏幕的(screen-based)。也就是說,Screen類封裝了設備特定的圖形和用戶交互,所有的用戶界面組件都位於屏幕上,並且一次只顯示一個屏幕,並且只能浏覽或使用這個屏幕上的條目。由屏幕來處理所有的用戶界面事件。並只把高級事件傳送給應用。之所以采取這種面向屏幕(screen-orIEnted) 的方式,主要是因為移動設備的顯示屏幕和鍵盤實是種類太多了,幾乎每個廠家都多多少少有所不同。圖1是基於屏幕的MIDP圖形用戶界面的一些例子。

  圖1:基於屏幕的MIDP 圖形用戶界面

  MIDP 應用編程接口具有高級用戶界面類和低級用戶界面類。高級用戶界面類(例如Form、List、TextBox、TextFIEld、Alert,及Ticker)可被適配到設備上:支持圖像、文本、文本輸入域、單選按鈕等。低級用戶界面類(Canvas類)允許開發者根據需要繪制任意圖形。MIDlet可以運行在各種不同尺寸的彩色、不同灰度等級或黑白屏幕的手機上。高級用戶界面類是通用用戶界面元素的抽象,它的用途在於提高MIDlet跨不同設備的移植性,並且可以使用本地設備的外觀表現。低級應用編程接口則能夠更直接地控制顯示內容,但是MIDlet設計者應該確保其在不同設備(顯示尺寸、鍵盤、色彩等)上的可移植性。上面的例子既用到了高級應用編程接口又用到了低級應用編程接口。

  所有的MIDP圖形用戶界面類都是Javax.microedition.lcdui程序包的一部分。

  2、MIDlet屏幕

  MIDP有兩種主要的屏幕類型:

  A 高級屏幕

  它包括簡單的高級屏幕類,例如List和TextBox。用戶不能添加額外的圖形用戶界面組件到這種類型的屏幕中。九宮格MIDlet示例程序使用的屏幕是繼承於名為ChoosePIEceScreen的List類,用於游戲者在游戲開始時選擇棋子。

  一般的Form屏幕類和List類很相像,但是它允許使用額外的圖形元素,例如:圖像、只讀文本域、可編輯文本域、可編輯數據域、標尺和選項組。Form條目可以任意地被添加或刪除。九宮格例程中沒有使用Form類。

  B 低級屏幕

  Canvas(畫布)屏幕(和Graphics、Image類) 可以用來編寫基於低級應用編程接口的用戶界面。這些類給予MIDlet程序員很大程度的繪畫靈活性。程序員可以繪制各種類型的圖形元素,例如:線、弧、矩形、圓角矩形、圓、文字(不同顏色、字體、大小)、位圖剪輯等等。大部分的游戲MIDlet是使用基於畫布屏幕類的主圖形用戶界面元素編寫的。

  一個MIDlet用戶界面通常包含一個或多個屏幕。因為每次只能顯示一個屏幕,因此MIDlet具有良好設計的結構是非常重要的進行,這樣就能更加容易地處理屏幕之間內容的切換。

  下面的代碼段說明了在一個MIDlet中切換屏幕的方法,基於屏幕類和對應的MIDlet回調。

  代碼段1:

  Class MyMIDlet extends MIDlet
{
private FirstScreen firstScreen;
private SecondScreen secondScreen;
public MyMIDlet()
{

}
public void startApp()
{
Displayable current = Display.getDisplay(this).getCurrent();
if (current == null)
{
firstScreen = new FirstScreen(this, …);
Display.getDisplay(this).setCurrent(firstScreen);
//顯示應用程序的第一個用戶界面屏幕
}
else
{
Display.getDisplay(this).setCurrent(current);
}
}
// FirstScreen 回調切換到下一個屏幕
public void firstScreenDone()
{

secondScreen = new SecondScreen(this, …);
display.getDisplay(this).setCurrent(secondScreen);
}
// SecondScreen回調終止應用程序
public void secondScreenQuit()
{

destroyApp(false);
notifyDestroyed();
}

}

  這個MIDlet使用了兩個屏幕類(FirstScreen和SecondScreen)作為用戶界面。當開始執行MIDlet的時候,它設置當前顯示屏幕為FirstScreen。當需要從FirstScreen切換到SecondScreen的時候,FirstScreen 調用父MIDlet方法firstScreenDone(參見下面的代碼)。firstScreenDone方法創建並設置SecondScreen為當前顯示的屏幕。

  代碼段2: 包含MIDlet回調的FirstScreen示例

  Class FirstScreen extends Form implements CommandListener {
private MyMIDlet midlet;
public FirstScreen(MyMIDlet midlet)
{
this.midlet = midlet;

}
public void commandAction(Command c)
{
if (c == cmdQuit)
{
parent.firstScreenDone();
}

}

}

  3、MIDP用戶界面應用編程接口

  保證基於高級應用編程接口類的用戶界面對象的可移植性和適用性是MIDP設備的職責。

  另一方面,像Canvas和Graphics這樣的低級類為程序員提供了更大的自由空間讓其控制其用戶界面的視覺表現,並且監聽低級鍵盤事件。程序員還要負責確保應用程序在不同特性(例如顯示尺寸、彩色或黑白,以及不同鍵盤類型)的移動設備上的可移植性。比如說,有可能需要使用getWidth()和getHeight()方法調節用戶界面外觀使其適應一個或更多設備的可用Canvas尺寸。

  下面的九宮格MIDlet例程將介紹:

  簡單應用高級應用編程接口;

  使用低級應用編程接口來繪制線、弧、字符串和圖像等圖形;

  不同顯示尺寸的移動設備之間的MIDlet移植問題

  鍵盤代碼與游戲動作之間的映射

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