程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 基於Java的移動游戲開發入門

基於Java的移動游戲開發入門

編輯:JAVA編程入門知識

如果讀者有Java編程經驗,尤其是AWT和SWING的Java GUI開發經驗將十分有助於理解本文,盡管不是必需的。

一、 引言
近來,移動游戲在提供個人娛樂方面變得越來越流行。這種流行使得移動游戲給手機用戶,游戲出版商和手持設備制造者帶來豐厚的利潤;移動游戲,在給游戲開發者和相關人員帶來無數商機的同時,處於極為重要的樞紐位置。據估計,到2009年,全世界的手機玩家有望達到兩億兩千萬之多,移動游戲業將被規劃並擴展到一個更高層次,為手機用戶和手持設備制造者帶來更大的利潤份額。

移動游戲可以分為三大類:

·嵌入式游戲:被硬編碼到移動手持設備系統中的游戲,並隨著設備一同發布。不久就會過時。例如:隨著諾基亞手機一同發行的貪吃蛇游戲。

·SMS游戲:通過發送文本消息來玩的游戲-例如,把SMS消息發送到游戲服務器-該服務器處理這些SMS消息,然後再通過SMS消息形式發送回結果。經常是以在線競賽和測驗形式出現。並不很流行,因為游戲的費用將隨著把每一個SMS發送到游戲服務器而逐步增加。

·浏覽器游戲:這些游戲可以使用移動電話的內嵌微型浏覽器(專用於移動設備的網絡浏覽器)來玩,在線或離線的方式都可以。玩家可以通過自己的手持設備或一個第三方游戲供給者的游戲Web站點的方式在線玩這樣的游戲,或下載它們後離線玩。這一類游戲又有很多種類,例如單人或者多人游戲,網絡游戲,離線游戲,街機游戲,等等。

在這三種類型中,浏覽器游戲是今天最流行的移動游戲類型,這是因為它們具有創新性和豐富的多媒體內容,引人入勝的表達與SMS游戲相比的低價位優勢。本文將重點討論浏覽器游戲開發。今後,術語"移動游戲"在本文專指"浏覽器游戲"。

注意:本文集中於討論2D游戲開發。因為今天流行的大部分的數字移動電話有很有限的資源(小的屏幕,有限的內存和圖形支持,繁瑣的鍵盤輸入),所以時下最適合於這些設備的也是最具有商業可行性的游戲是2D游戲。但是,隨著移動電話能力的不斷提高,3D游戲在不久的將來將廣為流行。

移動游戲可用C++,Java(J2ME),還有Qualcomm公司的Binary Runtime Environment for Wireless(BREW)平台來進行開發。

二、 為什麼選擇Java進行移動游戲開發?

盡管C++能夠被編譯成本機代碼並且可以直接存取本機系統資源,以及與BREW(它允許開發者使用任何希望的語言,包括C++,Java,XML和Flash)相結合為移動游戲開發者提供端到端的解決方案,但是Java仍然是進行移動游戲開發的最流行的選擇。Java,或更精確的說是Java 2微型版本(J2ME)平台,被認為是開發移動游戲的最方便的語言。(要更多地了解J2ME,請參考"What is Java 2 Micro Edition?")。J2ME如此流行的背後動力包括:

·J2ME遵循為大多數手持設備生產商所支持的工業標准,如今大多數的移動電話都支持Java開發。

·J2ME是一個自由的和開放的平台。這使得開發人員投資很少,但卻提供給他們必需的靈活性以及大量的支持。

·它的高度可移植的特性("書寫一次到處運行")保證一部為一個品牌/類型的手持設備開發的游戲應用程序,將可以工作在其它類型的支持Java的手持設備品牌/類型上。

·它特別為小型設備進行了優化,是輕量級的,高度安全的,因為在其上開發的應用程序不能存取或者影響運行在該手持設備上的其它應用程序。

J2ME包含移動信息設備輪廓(MIDP)API,它的設計是為專門開發包括手機在內的移動設備應用程序,但切記它們的局限性和約束條件。而且,最新的MIDP 2.0版自己提供了一套完整的API以用於游戲開發,這使得游戲開發更為簡單和快捷。

現在,我們探索一下MIDP 2.0在移動游戲開發環境中的使用。

三、 MIDP2.0在游戲開發中的地位

MIDP2.0 API是一組具有特別性能的API,可用於開發安全的,內容豐富的多媒體應用軟件,包括適合於移動設備的游戲程序。MIDP 2.0基於以前的MIDP 1.0之上並提供一個更好的開發平台以創建高效快速的移動設備應用程序。

MIDP 2.0進一步提煉了MIDP 1.0的特性和有關功能。有關這些新特性的信息請參考What’s New in MIDP 2.0。新增添到MIDP上的重要特點之一是Game API,或更精確地說是javax.microedition.lcdui.game API包。通過該Game API,MIDP 2.0提供給游戲開發者現成的程序模塊,這些模塊在早期的MIDP 1.0時是你必須從頭開始創建的。這些模塊以類的形式提供,用於創建和控制各種游戲元素,如游戲畫布、精靈、層等等(後文將介紹)。這樣,MIDP 2.0大大減少了游戲開發者的創作時間。

進行游戲開發必需的另外兩個MIDP 2.0 API包,在本文中也作了探索,它們是javax.microedition.midlet和javax.microedition.lcdui。
javax.microedition.midlet API包是開發各種類型的移動應用程序的基礎。它包含javax.microedition.midlet.MIDlet類,它是所有的基於J2ME的移動應用軟件(或稱為midlet)的基類,它必須由所有移動應用程序的main類加以擴展後使用。非常類似於java.applet.Applet類,MIDlet類提供創建midlet程序的必要的資源。

javax.microedition.lcdui API包是開發各種類型的移動應用程序的用戶接口所必需的。這個API提供類來創建和控制UI部件(例如屏幕,表單,文本框,單選按鈕,等等)並且處理包括游戲在內的移動應用程序的輸入。有使用AWT和SWING GUI開發經驗的開發者會發現javax.microedition.lcdui包中的元素非常相似於這些API中的元素。

我將在本文的示例游戲開發期間討論這些API中的和游戲開發相關的元素。
四、 構建示例游戲

為了更好地理解這些API和它們各自的類,你最好動手開發一個簡單的移動游戲。這裡是一個單人的離線游戲,通過障礙物線路的駕車游戲。玩家使用左鍵和右鍵用於改變車的方向到左邊或者右邊以防止與障礙物的碰撞。游戲在發生碰撞並顯示得分後結束。該游戲命名為HardDrive。

注意:雖然這個示例游戲是使用J2ME Wireless Toolkit 2.1_01和J2SE 1.4.2_07 SDK在Windows 2000平台上開發的,但是,其它版本的與另外一些平台相匹配的Wireless Toolkit和J2SE SDK也可以利用。

現在開始構建游戲程序HardDrive。從前一節中得知,你第一個需要開發的程序是HardDriveMIDlet(HardDriveMIDlet.java),它擴展了javax.microedition.midlet.MIDlet類。

(一) HardDriveMIDlet.java

列表1.1:該代碼片斷來自於文件HardDriveMIDlet.java

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
public class HardDriveMIDlet extends MIDlet implements CommandListener {
... ... ... ... ... ... ... ...

HardDriveMIDlet還實現了javax.microedition.lcdui.CommandListener接口來接收命令事件,它們是在應用程序執行和處理期間產生的。當發出EXIT,CANCEL,BACK,OK,STOP以及類似的命令-這些命令通過使用軟按鈕(在移動電話屏幕附近的特殊的按鈕,除了箭頭鍵以外)產生並被HardDriveMIDlet的commandAction()方法所處理-時,這些命令事件發生。為了提高效率,可把這些命令添加到畫布上去。

HardDriveMIDlet用作所有canvas的容器,這些canvas是一些描述可用於在移動設備屏幕上進行繪制的對象。這裡,midlet包含了HardDriveCanvas,它擴展了javax.microedition.lcdui.game.GameCanvas類。GameCanvas是一個專門的畫布,用於為游戲程序繪制有效的動畫圖像,還能夠查詢為實現平滑動畫效果而采取的脫屏圖像緩沖技術有關的關鍵狀態。

HardDriveMIDlet包含的另外的一個canvas是GameOverCanvas,它擴展了javax.microedition.lcdui.Canvas類。Canvas是一個簡單canvas,用於繪制文本,線段以及簡單的形狀等。當需要在屏幕上進行簡單的繪制時-例如為顯示游戲初啟畫面,游戲結束屏幕以及游戲指令屏幕-這個canvas被擴展,而取代了繁重的繪制。一個游戲程序的midlet可以包括任何個數的canvas,但是每次僅顯示一個canvas,這是通過使用javax.microedition.lcdui.Display類的setCurrent()方法來實現的。

HardDriveMIDlet還包含3個另外的重要方法,也稱作lifecycle方法。它們是startApp()、pauseApp()和destroyApp(),分別相應於該midlet的Active,Paused和Destroyed狀態。在HardDriveMIDlet的startApp()方法中,實現實例化HardDriveCanvas並通過使用HardDriveCanvas類的方法addCommand()把EXIT命令添加到它上面去。

(二) HardDriveCanvas.java

HardDriveCanvas實現了一個java.lang.Runnable接口來使它自己可以運行在自己的線程中,這對於獨立地執行游戲循環是必需的。該游戲循環被連續不斷地執行,直到終止游戲的必備條件滿足為止(在本例中,當汽車碰撞到障礙物上或者在任何時候當玩家使用Exit按鈕退出游戲)。

列表1.2:文件HardDriveCanvas.java中的游戲循環

public void start()
{
gameRunning = true;
Thread gameThread = new Thread(this);
gameThread.start();
}
... ... ... ...
... ... ... ...
public void run()
{
Graphics g = getGraphics();
//... ... ...一些代碼
while (gameRunning) //游戲循環
{
tick();
input();
render(g);
//... ... ...一些代碼
try
{
Thread.sleep(timeStep );
//... ... ... ...一些代碼
}
catch (InterruptedException ie) { stop(); }
}

列表1.2顯示HardDriveCanvas.java中的游戲循環。這是一典型游戲循環,它包含了依次對tick(),input()和render()方法的調用。tick()方法檢查是否停止該游戲的必需條件已經滿足;如果滿足

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