張 敏
?
基于java的手機游戲設計的研究
張 敏
(武漢信息傳播職業技術學院 湖北 武漢 430223)
隨著手機、ipad、筆記本電腦等移動設備的普及,Java功能在移動設備上的普遍應用更為明顯,基于Java功能的手機增值服務日益體現出其影響力,J2ME(Java 2 Micro Edition)技術應運而生,它主要定位在消費性電子產品上,完美地解決了設備的智能化、多樣化,極大地豐富了人們的生活,為人們提供了快捷的咨詢和服務。
本文介紹了一個基于J2ME的手機游戲的設計過程。本文采用開源的Eclipse為基本的開發環境,以J2ME開發套件為基本開發工具,設計了名為瘋狂賽車的java小游戲。本文從游戲的需求分析開始,詳細描述了設計概要,并且對于游戲的具體實現過程作了詳細的闡述,最后也對游戲的調試做了簡單的介紹。本文為一個完整的基于J2ME的手機游戲設計過程,有助于推廣到基于java的其他手機增值業務的開發和設計。
Java;J2ME;MIDP2.0;手機游戲
隨著手機的日漸普及,基于手機的應用越來越多:QQ、MP3、視頻、攝像、導航定位、新聞快訊、電子錢包等等。這些應用都是為了滿足人們的需要而開發的,都取得了不同程度的發展。而其中的一個應用——手機游戲已經成為整個視頻游戲領域發展速度最快的部分。手機游戲給人以極大的想象空間,激勵著眾多知名企業和創業團隊加入到手機游戲的產業之中,其擁有的巨大的商業潛力,在不久的將來必將成為游戲行業的下一個金礦。盡管每個手機游戲都不貴,但是巨大的使用量將使得這個市場商機無限。隨著3G時代的到來,手機游戲必然有著不可限量的發展前景。
眾所周知,現在的手機具備了越來越多的新的功能,比如藍牙、視頻、GPS等,當然游戲功能也越來越強大,而開發這些手機應用軟件主要依賴于這些平臺:J2ME、Brew、Symbian。J2ME平臺的優點是開發速度快、周期短、支持的手機多、開發資源豐富、移動已商用。而缺點是代碼可以反編譯。各廠商SDK不兼容,同一廠商的不同型號手機不兼容,限制比較多,不完全支持Socket,執行效率低。BREW的優點:API功能較強,速度較快,聯通已商用。缺點是目前只支持C,支持手機不多。Symbian的優點是獨立操作系統,功能強大,支持幾乎所有新功能,是未來手機的趨勢。缺點是開發難度很大,成本相對較高,各種資源較少。
綜上比較以上幾種開發平臺的優缺點,可以發現J2ME具有移植性強、開發速度快、跨平臺、開發資源豐富的優勢,選用J2ME平臺來進行手機游戲的開發是很理想的選擇。這個版本針對資源有限的電子消費產品的需求精簡核心類庫,并提供了模塊化的架構讓不同類型產品能夠隨時增加支持的能力。由此看來使用J2ME平臺來開發游戲項目是最理想不過的。本文采用開源的Eclipse為基本的開發環境,以J2ME開發套件為基本開發工具,完成游戲的設計。
(1)安裝JDK:由于Eclipse自身并沒有附帶Java運行環境JDK,所以安裝前要先安裝JDK。本文采用的是jdk1.6.0_10。
(2)Eclipse的安裝:本文采用的Eclipse版本為Eclipse3.2。Eclipse安裝很簡單,只需要將下載的Eclipse壓縮包解壓到任何一個選定的目錄即可。本文將其解壓到C:Program Fileseclipse。本文采用的是中文開發環境,因此需將Eclipse的語言包NLpack-eclipse-SDK-3.0解壓到與Eclipse相同的目錄下,即C:Program Fileseclipse即可。
(3)安裝并配置EclipseME插件:EclipseME作為Eclipse一個插件,致力于幫助開發者開發J2ME應用程序。但是EclipseME并沒有為開發者提供移動設備模擬器。所以后面還要進行加載WTK模擬器。
(4)加載WTK(j2me_wireless_toolkit-2_1_01-windows.exe):WTK是Sun J2ME Wireless Toolkit的簡稱。它是sun公司所提供的一個無線開發工具包,該工具包包含生成工具、實用程序及設備仿真器。它向用戶提供一個集成環境,把程序的編譯、連接和運行等操作全部集中在一個環境上運行,使用十分方便。它通用性高,開發出的應用程序可保證能運行在大部分設備上。由于EclipseME并沒有為開發者提供移動設備模擬器。所以,為了能為開發者提供一種無縫的統一集成開發環境,還需要將手機廠商的模擬器配置到Eclipse開發環境中。
(1)建立工程及文件
在Eclipse平臺上順序選擇“文件”、“新建”、“J2ME”、“J2ME Midlet Suite”,然后命名該工程名為:helloworld。與此同時在上述工程下建立一個MIDlet文件:helloworld。操作:在Eclipse平臺上右鍵單擊工程名,然后在彈出的快捷菜單中順序選擇“新建”、“J2ME”、“J2ME Midlet”,接著命名該文件名為:helloworld,將上述代碼復制到helloworld文件下并保存。
(2)調試運行
在Eclipse平臺上,右鍵單擊工程名,然后再彈出的快捷菜單中順序選擇“運行方式”、“運行”、“Wireless Toolkit Emulator”。右擊“Wireless Toolkit Emulator”選項,在彈出的快捷菜單中選擇“new”,彈出上面那個對話框。指定helloworld為可執行MIDlet程序的入口文件,然后單擊“應用”,最后單擊“運行”運行。Eclipse自動啟動WTK的模擬器,顯示“歡迎J2ME&EclipseME!”。
每個MIDlet程序都必須有一個主類,該類必須繼承自MIDlet。它控制著整個程序的運行,并且可以通過相應函數從程序描述文件中獲取相關的信息。該類中擁有可以管理程序的創建、開始、暫停、結束的函數。
本游戲主要實現的功能是小車躲避障礙物(炸彈),具體是通過方向鍵控制小車的方向(上、下、左、右)從而躲避自上而下降落的炸彈,在游戲開始的同時,開始計分,到最終程序檢測到有碰撞事件發生時(也即游戲結束時)停止計分,退出游戲同時顯示得分。要實現以上功能必須解決以下這些問題:
4.1.1關于碰撞檢測的算法
發現在碰撞發生時其實并不是兩個物體的相切時,而是還隔有一小段距離就發生碰撞事件,原因是采用了矩形和矩形進行碰撞:一般規則的物體碰撞都可以處理成矩形碰撞,實現的原理就是檢測兩個矩形是否重疊。但是矩形碰撞只是一種比較粗糙的碰撞檢測方法,因為很多實際的物體可能不是一個規則的矩形。解決方法是:
(1)盡量使用物體是矩形的圖片;
(2)采用圓形和圓形的碰撞,因為在數學上對于兩個圓形是否發生重疊,有計算兩個圓心之間的距離的公式。那么條件就變為:計算兩個圓心之間的距離是否小于兩個圓的半徑之和。
4.1.2邊界檢測
通過程序控制賽車和炸彈在屏幕上的出現位置,避免越界。這個問題只需通過比較坐標與屏幕的大小即可實現。如程序:炸彈的邊界檢測:
if (x < bombWidth) x = bombWidth;
if (x > gameCtrl.width - bombWidth) x = gameCtrl.width - bombWidth;
if (gameCtrl.bombPosY[i] > gameCtrl.height + bombHeight / 2)
gameCtrl.bombCanUse[i] = false; // 炸彈出界檢測:
4.1.3動態背景畫面的實現
用數組循環在屏幕上出現的虛線。程序在后面的“游戲背景的制作”中會有詳細講解。
4.1.4計分功能
該功能是通過一個計數器來實現。在每次碰撞檢測過后判斷是否gameCtrl.score++。
本程序采用面向對象的設計模式,對游戲中的所有物體賦予對象的概念和屬性。運行程序后允許用戶選擇執行選項菜單,在開始游戲后將先從外部文件載入賽車和炸彈的圖文件,對背景的所有物體進行繪圖。在主程序運行的線程中,實時反映整個游戲的進行狀態。用戶控制的賽車運行在主線程中,隨屏幕刷新的頻率而移動。
本游戲共建立三個.java文件,分別是:RacingMIDlet.java、GameCtrl.java和NextFrame.java。程序一開始執行是先從主類RacingMIDlet.java來開始。這個類從MIDlet類繼承過來,在程序的開始函數startApp()中調用下面函數來暫時顯示一個屏幕對象。
Alert splashScreen = new Alert(null,"歡迎來玩瘋狂賽車,方向鍵控制方向",logo,AlertType.INFO);
當Alert對象超時,系統會顯示另一個Displayable對象。
Displayable current = display.getCurrent();
display.setCurrent(current);
這兩個語句把程序的執行轉向GameCtrl.java文件來。而這個類繼承CommandListener,這個CommandListener類用來截獲按鈕點擊事件,也就是監聽按鈕的點擊,然后調用相應的方法:
(1)當點擊“退出”時,游戲退出。
(2)當點擊“開始”時,程序轉到GameCtrl類中的paint(Graphics g)函數中去,這個函數是用來繪制游戲界面的,里面包括游戲背景的繪圖,炸彈和賽車的繪圖。然后轉到initialize()函數來初始化一些變量。接著轉到keyPressed(int keyCode)來偵聽并響應按鍵操作。然后NextFrame類中的run()開始進行邊界檢測及碰撞檢測,當檢測到碰撞事件時游戲結束,定時器停止工作,返回gameCtrl.score值,顯示分數。見圖4.1所示。

圖4.1 程序流程圖
(1)游戲進入前的選擇
本設計程序進入時,首先載入畫面的不是游戲運行狀態,而是提供選項,當選擇開始時正式運行。這部分由RacingMIDlet.java文件實現。在類RacingMIDlet中的startApp()函數中,隨即調用了Displable的setCurrent()函數將當前屏幕設置為Displayable current = display.getCurrent()。另外需要建立一個Alert對象,其用于顯示提示、警告,還有版權信息等告之用戶信息的臨時閃現的屏幕,它可作為setCurrent的參數,提前顯示在最終需要顯示的屏幕前。GameCtrl繼承了接口commandListener,這樣就可以使用高級界面的Command按鈕。繼承了CommandListener的類必須擁有commandAction(),以決定對按鍵采取什么樣的行為。即按鈕事件觸發后需執行的函數。在設置好Commandlistener后,需要調用setCommandListener()以將按鈕事件激活。鍵盤事件中,可用getCommandType()返回的Command類型來確定選擇的是什么按鈕。keyPressed(int keyCode)用來處理游戲按鍵操作。repaint()重新繪圖。
(2)游戲的登陸界面制作
這個寫在GameCtrl.java文件中,通過使用高級界面的Command按鈕來實現游戲的“開始”、“退出”命令。繼承了CommandListener的類必須擁有commandAction(),以決定對按鍵采取什么樣的行為。即按鈕事件觸發后需執行的函數。在設置好Commandlistener后,需要調用setCommandListener()以將按鈕事件激活。
再用commandAction(Command arg0,Displayable arg1)函數來控制游戲的開始與結束。登陸界面圖畫則通過paint(Graphics g)實現。
(3)游戲背景的制作
本游戲要在手機屏幕上顯示一段公路,具體說就是在屏幕上畫兩條線,這要用到繪圖類Graphics。首先設置背景顏色setColor(255, 255, 255)為白色并填充屏幕fillRect()。然后用setColor(0,0,25)確定繪圖所用顏色為藍色,并用g.drawLine()實現繪制線條的功能。為了能表現出賽車奔馳的場面,故而采用虛線繪制(LineMode=true)。
(4)賽車的控制
操作非常簡單,僅僅是通過手機方向鍵控制賽車的上、下、左、右移動。
首先偵聽按鍵操作,語句如下:keyPressed(int keyCode);
獲得按鍵操作后,然后將按鍵操作復制給專門的游戲按鍵。
int gameAction = getGameAction(keyCode);
接著進行按鍵響應,執行按鍵操作,從而控制賽車的移動。
switch (gameAction)
{ case RIGHT;carPos += 5; case LEFT:carPos -= 5;
case DOWN:carPoc += 5;case UP:carPoc -= 5;}
(5)炸彈的運行及控制
首先判斷炸彈是否在屏幕上出現,采用如下判斷語句。if (gameCtrl.bombCanUse[i] == false),若炸彈沒顯示時設置初始位置,顯示后水平位置固定。
if(x > bombWidth) x = bombWidth;
if(x > gameCtrl.width - bombWidth) x > gameCtrl.width – bombWidt;
然后將炸彈設置在虛擬屏幕,gameCtrl.bombPosY[i] = -y;
接著開始炸彈的下移。gameCtrl.bombPosY[i] += 6;
與此同時要檢測炸彈是否出界,若沒出界則繼續執行下降操作,否則返回到初始時刻重新設置初始位置。
本文采用開源的Eclipse為基本的開發環境,使用J2ME為開發套件,依次安裝了JDK1.6.0_10、Eclipse3.2、EclipseME1.7.9、WTK2.1_01這四個軟件及插件搭建起手機游戲開發平臺——J2ME,從而進行手機游戲——瘋狂賽車的設計與實現過程。本文分別介紹了該游戲設計的背景及相關技術,開發工具及平臺的搭建,手機游戲的需求分析、概要設計和詳細設計。
[1]陳旭東.《J2ME應用教程》[M].北京:清華大學&北京交通大學出版社,2006
[2]汪永松.《J2ME手機高級編程》[M].北京:機械工業出版社,2009
with the mobile phone, tablet, the popularity of mobile devices such as notebook computer, Java features on mobile devices widely used is more apparent, mobile value-added services based on Java function increasingly reflects its influence, J2ME (Java 2 Micro Edition) technology arises at the historic moment, its main role in consumer electronics, perfectly solve the intelligent equipment, diversified, have greatly enriched the life of people, provides people with quick consulting and services.
This article introduces the design process of a mobile game based on J2ME. This article USES the open source Eclipse as a basic development environment, and USES the J2ME development suite as the basic development tool to design a Java mini game called crazy racing. In this paper, from the beginning of the game needs analysis, detailed design profiles, and for the game in detail on the concrete implementation process, finally also debugging made simple introduction to the game. This paper is a complete j2me-based mobile game design process, which can be extended to the development and design of other mobile value-added services based on Java.
Java J2ME MIDP2.0 mobile game.
10.19551/j.cnki.issn1672-9129.2017.11.030
TP311.52
A
1672-9129(2017)11-0025-02