(精品論文)j2me畢業(yè)論文_第1頁
(精品論文)j2me畢業(yè)論文_第2頁
(精品論文)j2me畢業(yè)論文_第3頁
(精品論文)j2me畢業(yè)論文_第4頁
(精品論文)j2me畢業(yè)論文_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

目 錄第1章 緒 論1第2章 J2ME技術(shù)概覽22.1 J2ME的概念22.2 J2ME簡介22.2.1 J2ME架構(gòu)32.2.2 JVM ( 虛擬機 )32.2.3 MIDP( 移動信息設(shè)備簡表 )42.3 手機游戲的發(fā)展52.3.1 目前國內(nèi)的發(fā)展情況52.3.2 目前國際的發(fā)展情況6第3章 游戲設(shè)計的需求分析93.1 MIDP中的游戲API93.2 游戲類構(gòu)成93.2.1 Boxer類的實現(xiàn)103.2.2 GameCanvas類的功能及特點103.2.3 Sprite類的功能及特點113.3游戲角色的處理113.4 游戲中的事件處理123.4.1 key Pressed方法123.4.2 key Released方法13第4章 “Pocket Boxing”手機游戲開發(fā)制作144.1 游戲編程144.2 格斗類手機游戲?qū)嵗?44.2.1 “Pocket Boxing”游戲背景介紹及開發(fā)環(huán)境144.2.2 MIDlet的構(gòu)成154.2.3 MIDlet的生命周期164.2.4 MIDlet的畫面顯示基礎(chǔ)164.2.5 游戲項目的創(chuàng)建184.2.6 命令種類及命令處理194.2.7 游戲中的描繪處理214.2.8 游戲狀態(tài)的類變量234.2.9 按鍵事件的處理244.2.10 設(shè)計存在的難點25第5章 手機游戲開發(fā)過程中的困難265.1 手機游戲開發(fā)存在的困難265.1.1 移動開發(fā)存在的問題275.1.2 操作環(huán)境不兼容性問題275.1.3 顯示速度方面的問題285.1.4 不同的屏幕尺寸問題285.1.5 輸入問題295.2 解決方案29第6章 J2ME手機游戲前景展望316.1 J2ME手機游戲的優(yōu)勢316.2 J2ME手機游戲的開發(fā)意義32第7章 結(jié) 論35致 謝36參考文獻37英文資料翻譯38-21-摘 要JAVA已經(jīng)從一種平臺無關(guān)的編程語言演變成一種與廠商及平臺無關(guān)的健壯的服務(wù)器端技術(shù),促使IT業(yè)界深入發(fā)掘以Web為核心的應(yīng)用程序的巨大潛力。J2ME 的出現(xiàn)使這一變化達到了一種新的高度。J2ME,簡稱Java2平臺袖珍版( Java 2 Platform ,Micro Edition (J2ME) ),是SUN公司在J2SE和J2EE之后,致力于消費產(chǎn)品和嵌入式設(shè)備的最佳解決方案。作為JAVA的三個版本之一,J2ME在無線編程技術(shù)中正發(fā)揮著它獨特的作用。J2ME為在小型電子設(shè)備上創(chuàng)建性能卓越的網(wǎng)絡(luò)應(yīng)用提供了一套完整的解決方案。它也使設(shè)備制造商、服務(wù)提供商及應(yīng)用開發(fā)人員為他們的用戶發(fā)布新的軟件應(yīng)用成為可能。本篇論文共分為七個部分:包括緒論、J2ME技術(shù)概覽、游戲設(shè)計的需求分析、“Pocket Boxing”手機游戲開發(fā)制作、手機游戲開發(fā)存在的困難、J2ME手機游戲前景展望和結(jié)論。其中第四部分“Pocket Boxing手機游戲開發(fā)制作”是本篇論文的重點。整篇論文都是圍繞著這一部分來展開論述的,在這一部分里詳細介紹一款手機游戲“Pocket Boxing”的開發(fā)全過程和開發(fā)過程中存在的疑難問題。其中包括:游戲事件、游戲API等以及對事件的處理,另外在游戲描繪處理部分也將作為重點進行介紹。通過對J2ME的詳細介紹我們可以從中了解到其自身的作用,近年來,隨著JAVA手機的誕生,其無可替代的靈活性與輕便性致使JAVA手機游戲成為游戲市場的又一亮點,它的前景無可限量,必將在我們以后的生活中發(fā)揮著重要的作用。關(guān)鍵字:J2ME, MIDP, 游戲編程, 事件, 描繪處理二、J2ME概覽2.1 J2ME的概念J2ME的全稱是Java2 Micro Edition (J2ME)Java2技術(shù)微型版,與J2SE、J2EE一樣都是有美國SUN微系統(tǒng)公司提出的JAVA技術(shù)規(guī)范。2.2 J2ME簡介J2ME是為了能夠開發(fā)運行在小型設(shè)備、獨立設(shè)備、互聯(lián)移動設(shè)備、嵌入式設(shè)備上的JAVA應(yīng)用程序而被提出的。J2ME是建立在一個由概要描述、配置、JAVA虛擬機和操作系統(tǒng)等部分組成的標準架構(gòu)之上的,這些內(nèi)容共同組成了完整的J2ME實時運行環(huán)境。它的技術(shù)核心是由一個JAVA虛擬機( JVM )及一套適合運行在上述設(shè)備環(huán)境上的API接口構(gòu)成。J2ME在1999年的JavaOne開發(fā)人員大會上初次亮相,它的目標是面向智能無線設(shè)備和小型計算設(shè)備的開發(fā)人員,這些開發(fā)人員需要在他們的產(chǎn)品中整合跨平臺的能力。無線設(shè)備和小型計算設(shè)備的消費者期望這些設(shè)備能夠有較高的性能。他們希望小型計算設(shè)備有快速的響應(yīng)時間,與同種設(shè)備相兼容,擁有功能完備的應(yīng)用程序。消費者希望桌面計算機和筆記本電腦上的軟件和功能同樣能夠運行在移動電話和個人數(shù)字助理上。為了滿足他們的需求,開發(fā)人員必須重新考慮他們設(shè)計計算機系統(tǒng)的方式。開發(fā)人員需要利用商業(yè)計算機上現(xiàn)有的前端和后端軟件的計算能力,并將這些能力傳遞到微型、移動和無線的計算設(shè)備上。J2ME能夠以最小的修改來實現(xiàn)這種傳遞,如果應(yīng)用程序的設(shè)計是可伸縮的,應(yīng)用程序就可以適應(yīng)小型計算設(shè)備上有限的資源。J2ME為在小型電子設(shè)備上創(chuàng)建性能卓越的網(wǎng)絡(luò)應(yīng)用提供了一套完整的解決方案,能很好的解決軟件跨平臺的兼容性和安全性的問題。52.2.1 J2ME架構(gòu)J2ME架構(gòu)的模塊化設(shè)計使應(yīng)用程序可以靈活適應(yīng)小型計算設(shè)備的限制。J2ME架構(gòu)沒有替代小型計算設(shè)備的操作系統(tǒng)。相反,J2ME架構(gòu)由位于原生操作系統(tǒng)之上的多層軟件組成,這些軟件共同稱為“連接有限設(shè)備配置”(Connected Limited Device Configuration, CLDC)。安裝在操作系統(tǒng)之上的CLDC形成了小型計算設(shè)備的運行時環(huán)境。J2ME架構(gòu)由3個軟件層組成:第一層是包括在內(nèi)的配置層,這個層次直接與原生操作系統(tǒng)進行交互。配置層還處理profile和JVM之間的交互。第二層是profile層,由小型計算設(shè)備的應(yīng)用程序編程接口(API)的最小集合組成。第三層是Mobile Information Device Profile( MIDP )層。MIDP層由用戶網(wǎng)絡(luò)連接、永久存儲和用戶界面的java API組成。它還能夠訪問CLDC庫和MIDP庫。2.2.2 MIDP( 移動信息設(shè)備簡表 )MIDP是專門為互聯(lián)受限設(shè)備配置設(shè)計的,它為移動設(shè)備提供了一套API集合,MIDP包含用戶界面類、持久存儲功能與網(wǎng)絡(luò)功能。它同時也包括一個供用戶下載新應(yīng)用到終端設(shè)備的標準運行環(huán)境。運行在MIDP下的小應(yīng)用程序叫做MIDlet移動設(shè)備小應(yīng)用程序,它與Applet類似。MIDP要求平臺設(shè)備提供一個機制用來存儲簡單的數(shù)據(jù)記錄,通過正常的平臺事件,比如重新啟動和電池更新維護系統(tǒng)的完整性。MIDP是在CLDC的功能上附加提供適合目標設(shè)備用的GUI與事件處理功能。這樣一來,就可以當成MIDP應(yīng)用程序(MIDlet)來運行了。MIDP由于是由多個企業(yè)所共同策劃出來的開放標準,因此主要的移動電話制造商也會制造出大量的對應(yīng)機種。也就是說,以MIDP為基準所制作出來的應(yīng)用程序,也將可以在流通于市面上的移動電話上執(zhí)行。另外,MIDP不僅限于移動電話,也已經(jīng)被移植到PDA Palm OS上,而以MIDP for Palm OS的名字來稱呼(與KJava是不同的)。在不使用各電信商的擴展API的時候,制作給移動電話用的MIDlet也將可以使用在Palm OS上面。由于未來MIDP也將會搭載到不同設(shè)備之上,也由于其兼容性高,只要寫過一次程序,就可以在其他移動電話或是移動電話以外的設(shè)備上執(zhí)行;而這也就是它最大的好處。 2.2.3優(yōu)勢: 1、龐大的潛在用戶群,現(xiàn)在全球超過十億部移動電話正在被使用,并且這個數(shù)目正在逐漸增加。 2、便攜性 人們可以隨時隨地玩他們選擇的游戲,人們基本上是隨時隨地都把它們帶在身邊。 3、開發(fā)門檻低沒有大的開發(fā)團隊,沒有高的資金預(yù)算,沒有長的開發(fā)周期,有游戲平臺的開放性標準。2.2.4缺點:1、屏幕小 你面對的是小型的屏幕。雖然屏幕分辨率持續(xù)提高,并且彩屏即將成為標準,但是屏幕尺寸還是一直很小。 2、有限的顏色和聲音支持 大部分使用者手中的手機仍然是黑白的,雖然現(xiàn)在出售的支持Java的手機大部分都是彩屏手機。在這些手機中12bit彩色非常流行。即使手機本來就有聲音設(shè)備,但是應(yīng)用程序播放聲音的能力卻非常有限。J2ME規(guī)范根本不需要硬件廠商支持聲音,雖然基本的Java手機允許使用一些聲音并且MIDI支持正在成為標準。通常,手機中只有一個語音或者一個聲道可用。3、應(yīng)用程序大小限制 大部分的Java手機只有很少的內(nèi)存空間用于運行MIDlet。此外,對MIDlet的大小始終有一個限制。實際的限制取決于手機設(shè)備和移動運營商的規(guī)定。在這樣的限制條件下設(shè)計開發(fā)移動游戲固然是非常困難的,但是我們要知道,第一臺家用電腦只有64 KB內(nèi)存,但是仍然有人熱衷于在其上開發(fā)游戲軟件。在一些智能手機上內(nèi)存的限制就少一些,比如Nokia 3650甚至可以運行幾兆字節(jié)的應(yīng)用程序。 4、高等待時間 等待時間-機器發(fā)出請求和接到響應(yīng)之間所花費的時間-在計算機上是以微秒計算;在有線因特網(wǎng)上是以毫秒計算;而在無線網(wǎng)絡(luò)則要以秒計算。 5、可中斷性是關(guān)鍵 當用戶接聽電話的時候,手機都會中斷進行中的游戲。游戲程序必須能夠暫停并且繼續(xù),而且不會造成游戲問題(例如,游戲者在打電話的時候老怪仍然在移動,打死玩家扮演的角色,導(dǎo)致輸?shù)粲螒颍┎⑶也粫斐蓛?nèi)存溢出。 6、正在發(fā)展的技術(shù)用于開發(fā)移動游戲的技術(shù)并不是針對游戲設(shè)計的,因此常常有特定的限制條件。例如:J2ME規(guī)范不需要支持透明度,這就使得子圖形除了在空白的背景上以外,在任何背景上都會很難看。幸運的是,大部分設(shè)備廠商的Java手機都補充了J2ME,支持了透明度。為了充分利用J2ME的性能,你需要支持手機特定的API;為了得到最好的效果,就需要為一個游戲編寫好幾個版本。最近發(fā)行的MIDP 2.0規(guī)范解決了一些此類問題,但是對不兼容MIDP 2.0的手機是無效的2.2.5開發(fā)現(xiàn)狀:中國來看,有著龐大的用戶群,但相關(guān)的制約因素使手機游戲處于低迷期。 1、平臺的問題 現(xiàn)在手機的品牌有幾十種,每個品牌又有幾十款甚至上百款的手機,這無論是對游戲的開發(fā)者,還是普通的消費者來說,都是一個讓人頭痛的問題。2、手機性能的制約 由于手機游戲只是手機功能的延伸,所以存在著許多不利于游戲的因素。比如手機的屏幕小,顏色少,沒有專門的游戲遙桿,游戲的容量小,內(nèi)容簡單,限制了游戲的多元化。3、下載游戲的操作過程過于復(fù)雜 想下載游戲,必須要有一部支持Java和GPRS的手機,然后還要設(shè)置并開通GPRS,過程相當繁瑣,而且對于用戶來說在僅有的屏幕上對游戲的了解不多,很容易受到欺詐。 4、過高的資費標準 手機游戲開發(fā)商還通過移動通信運營商或戶網(wǎng)站、SP提供游戲服務(wù),并且根據(jù)下載次數(shù)收取一定的費用并與相關(guān)合作方分配收入,有時也采用收取授權(quán)使用費或賣斷使用權(quán)和版權(quán)的方式,導(dǎo)致游戲下載成本過高。 總體來說 手機游戲市場發(fā)展進入快速成長期,市場規(guī)模、用戶呈上升趨勢 。三、 游戲開發(fā)的概念3.1 MIDP中的游戲APIMIDP是專門為互聯(lián)受限設(shè)備配置設(shè)計的,它為移動設(shè)備提供了一套API集合,MIDP包含用戶界面類、持久存儲功能與網(wǎng)絡(luò)功能。早在MIDP1.0版本時,是沒有單獨的游戲API的,在MIDP2.0后增加了一個新的專門的游戲軟件包Javax.microedition.lcdui.game,顧名思義,此包中定義了游戲開發(fā)的各種類型。這個軟件包是一個專門為在移動信息設(shè)備上開發(fā)游戲應(yīng)用而設(shè)計的,所以又叫作游戲API。10它里面的成員類有以下幾個:GameCanvas、Layer、LayerManager、Sprite、TiledLayer。GameCanvas是提供基本的游戲界面;Layer是一個用來表示游戲中的可視元素的抽象類;LayerManager管理一系列的Layer;Sprite是一個基本的可視元素,它本身包含了許多操作,比如將一個圖片切分成若干畫面幀(Row Frame),再對這些畫面幀編排出一個動畫序列(Frame Sequence);TiledLayer是一個可以被許多圖片填充的類似于表格的可視元素。10本論文在設(shè)計游戲過程中涉及到其中的GameCanvas類和Sprite類。73.2 游戲類構(gòu)成在游戲中,主要的一些類構(gòu)成有Pocket Boxing、Boxer、Enemy、GameCanvas。其中Pocket Boxing類繼承了MIDlet類,用來進行MIDlet的Live Cycle控制;Boxer存儲了玩家的拳擊手的信息,進行拳擊手的描繪;Enemy存儲電腦控制的拳擊手的信息,進行拳擊手的描繪,它繼承了Boxer類;GameCanvas繼承了Canvas類,進行畫面的描繪與操作。各類都是用與類名稱相同的文件名來存儲的。3各類間的關(guān)系如圖3.1。3.2.1 Boxer類的實現(xiàn)Boxer類是用來存儲玩家拳擊手狀態(tài)的信息,再以次為根據(jù)進行描繪。Boxer類由于與用來表現(xiàn)對手的Enemy類大致上是相同的,所以要以繼承了Enemy類為前提來實現(xiàn)。MIDletCanvasInterfaceRunnableInterfaceCommandListenerPocketBoxingGameCanvasBoxerEnemy DefaultPackage圖3.1游戲類圖在Boxer類的Constructor當中,會進行拳擊手圖像的獲取。這里要準備拳擊手的身體、上段防御的手腕、下段防御的手腕、上段拳擊的手腕、下段拳擊的手腕等五種圖像。通過身體圖像四種類圖像的配合,就可以描繪出生動拳擊手動態(tài)。3.2.2 GameCanvas類的功能及特點GameCanvas類是Javax.microedition.lcdui軟件包中的Cavas類的一個子類,它可以為游戲提供基本的顯示功能;GameCanvas類是提供了游戲的中心屬性,如游戲鍵當前狀態(tài)的能力、雙緩存繪圖等;GameCanvas類是一個專門的為每一個GameCanvas實例填充初始化純白像素的緩存器;通過調(diào)用Graphics對象可以改變緩存器中的內(nèi)容。43.2.3 Sprite類的功能及特點Sprite類是一個能顯示幾個繪圖幀(frame)中的其中一幀的基本動態(tài)層;這些幀大小相同并且由一個單獨的圖片(image)對象提供;Sprite類可以使許多幀連續(xù)的運動,可以使一個定制的序列以任何方式被放置;另外還可以提供轉(zhuǎn)化于檢測方法。下面是Sprite代碼樣例:1import javax.microedition.lcdui.game.*;import javax.microedition.lcdui.*;public class Text Layer extends Sprite Image _image; String _string;TextLayer (Image i) super( i );public void draw(Graphics g ) throws NullPointerException Graphics.LEFT ) ;3.3游戲角色的處理這里的游戲角色拳擊手的初始化是以將拳擊手設(shè)為后退,并將生命值設(shè)為默認值為主要目的。拳擊手在揮出拳之后,將會在等待一段時間后恢復(fù)原本的防御狀態(tài)。為了要進行這個等待處理,使用到了Tick計數(shù)。當現(xiàn)在的狀態(tài)為上下拳擊時,就會開始Tick計數(shù),當數(shù)到4以上的狀態(tài)時就會回到原來的防御位置。這樣一來就可以表現(xiàn)出拳擊手出拳頭后再回到原來防御狀態(tài)的樣子。不過,在后退時揮出拳擊的情況中,這里不能馬上回到后退狀態(tài)。要在揮出拳擊后回到后退狀態(tài)時,就得通過玩家自己的操作來進行了。3.4 游戲中的事件處理事件可以分為:低層事件( low-level event )與高層事件( high-level event )。低層事件一般用來處理設(shè)備事件,如:按鍵事件、探針事件。高層事件用來處理應(yīng)用中的相關(guān)事件,如:命令事件、組件狀態(tài)變化事件。由于開發(fā)手機游戲時我們主要用到的是Key事件的處理方法,因為移動設(shè)備的鍵盤是傳遞用戶意圖的最主要的輸入設(shè)備,Key事件屬于低層事件。那么低層事件中用下面的兩種方法來處理應(yīng)用的Key事件。2 3.4.1 key Pressed方法方法key Pressed是用來處理鍵被按下的事件,這個方法沒有與其對應(yīng)的顯示的聽眾對象( Listener ),這些聽眾對象有系統(tǒng)根據(jù)實際對象缺省提供,例如后面提到的Canvas對象就是默認的key事件聽眾對象,它缺省地實現(xiàn)了Key Listener接口。簡單的一個樣例代碼: .public void keyPressed (int keyCode) if (keyCode 0) /輸出當前被按下鍵的鍵碼System. out.println(“keyPressed ” +( (char) keyCode ) ); else 當按下手機的操作鍵盤上的按鍵時,就會觸發(fā)這key事件,系統(tǒng)并會自動調(diào)用keyPressed()方法,并且系統(tǒng)將捕獲到的鍵碼傳遞給該方法,在上面的那段代碼中方法判斷了所按的按鍵值是否大于0,如果大于0輸出所按的手機鍵盤上的實際值,否則執(zhí)行其他的操作任務(wù)。4 3.4.2 key Released方法可以說方法key Released()與上面提到的keyPressed()方法是對應(yīng)的。它是用來處理手機操作鍵盤上的按鍵被釋放的事件,這個方法也同樣沒有與之對應(yīng)的顯示的聽眾,這些聽眾也是由系統(tǒng)根據(jù)實際對象提供的。下面是一個樣例代碼: public void keyReleased(int keyCode) if (keyCode 0 ) / /輸出當前被釋放鍵的鍵碼System.out.println(“keyReleased ” +( (char) keyCode) ); else 當釋放手機操作鍵盤上被按下的按鍵時,則會觸發(fā)這個key事件,系統(tǒng)并會自動交由keyReleased()方法來處理該事件,同樣的上面的這段代碼中,該方法判斷了所按的按鍵值是否大于0,如果大于0則輸出所釋放的手機鍵盤上的被按下的按鍵的實際鍵值,否則執(zhí)行其他的操作任務(wù)。4 上面說的是在開發(fā)手機游戲過程中遇到的兩種低層事件的方法keyPressed方法和keyReleased方法,下面就具體介紹“Pocket Boxing”手機游戲的開發(fā)過程。四、“Pocket Boxing”手機游戲開發(fā)制作4.1 游戲編程眾所周知,J2ME現(xiàn)在最流行的就是制作手機游戲,況且現(xiàn)在無線游戲編程現(xiàn)在又是一個很熱門的話題,不但因為它具有極強的趣味性,更重要的是它給我們帶來了無限的商機。隨著JAVA手機的誕生,手機游戲編程的靈活性與輕便性使得JAVA手機游戲成為游戲市場的又一亮點。 4.2.1 “Pocket Boxing”游戲背景介紹及開發(fā)環(huán)境 這里將通過一款拳擊游戲來介紹格斗類手機游戲中的攻擊與防御等重要因素、以及如何控制對手角色。這款游戲名字叫“Pocket Boxing”。在這款游戲中,玩家所控制的拳擊手將出現(xiàn)在屏幕的左側(cè),電腦所控制的拳擊手則出現(xiàn)在屏幕的右側(cè)。拳擊手可以進行上下兩種的攻擊方式,以及上下阻擋防守與后退防守的防衛(wèi)。當攻擊命中對手時,就可以是對手角色的生命點數(shù)減少,不過不是任何的攻擊方法都可以使對手的生命點數(shù)減少的。當玩家在進行上方和下方的攻擊的時候,對手進行相對應(yīng)防衛(wèi)的時候,在對手防守狀態(tài)中是不能使對手的生命點數(shù)減少的,還有一種情況就是在對手后退一步避開你的攻擊的時候也同樣不會減少生命點數(shù)的。當對手的生命點數(shù)用盡的時候,玩家就獲得了這一局比賽的勝利,就可以進入下一個回合。在進入下一個回合后,電腦控制的對手的生命值會恢復(fù),同時拳擊手的攻擊力會加強,也就是難度會加大。相對的玩家控制的拳擊手在前一回合所剩下的生命點數(shù),也可以附加到下一回合的生命點數(shù)上去。游戲中一共有五個回合,在全部的回合中取得勝利的話就是冠軍了。在中途如果被打敗,就算是游戲結(jié)束了。游戲流程如圖4.1:這款手機游戲是一個簡單的MIDP應(yīng)用程序,在這里進行開發(fā)有它需要的開發(fā)環(huán)境。MIDPlet的開發(fā)環(huán)境需要有java2 SDK1.3版以上(這里使用的是JDK1.4版)與MIDP的類庫、以及后述的運行前驗證工具三種。在J2MEWTK中除了包括MIDP的類庫、運行前驗證工具之外,還會把編譯與包裝(JAR文件化)、JAD文件的創(chuàng)建、模擬器的啟動等在開發(fā)MIDP需要用到的操作加以集成。當完成了JDK1.4以及J2MEWTK的安裝以后,就可以開始對游戲項目進行創(chuàng)建了。4.2.2 MIDlet的構(gòu)成開發(fā)環(huán)境準備好了之后,就應(yīng)該進行MIDlet的開發(fā)了。遵循MIDP規(guī)范的基本MIDPlet是組合了JAR文件與JAD文件來運行的。JAR文件是將Class文件或者是圖像等集成在一起的文件,而JAD文件則用來指定JAR文件內(nèi)啟動MIDlet類名稱或JAR文件的大小、版本等屬性。移動電話的JAM(Java Application Manager)一開始就是將這個文件讀進來后才啟動MIDlet的。JAR文件雖然基本上與J2SE是相同的,不過其中所放置的列表文件內(nèi)容是不一樣的。列表文件中編寫了許多的文件打包信息。一般來說可以在JAR文件內(nèi)放置多個MIDlet,通過在JAD文件中編寫MIDlet個數(shù)相等的內(nèi)容,JAM就能依次判斷MIDlet的數(shù)目。MIDlet文件的構(gòu)成:(1)JAR(Java ARchive)文件:集成了Class File與圖像、聲音等內(nèi)容的數(shù)據(jù)文件,雖然與J2SE的文件相同,但是列表的文件內(nèi)容不同。(2)JAD(Java Application Descriptor)文件:指定啟動的MIDlet類名稱或是數(shù)據(jù)文件大小、版本等信息。(3)KDDI的地方,使用組合了JAR文件與JAD文件的KDDI專用的KJK(KDDIJavaeXtension)。4.2.3 MIDlet的生命周期MIDlet的生命周期,與Applet或DoJa是不一樣的東西.若想要在Applet與DoJa之間作相互的移植時,對這個生命周期的流程有越深入地了解,在進行移植的時候就會越輕松。MIDlet是以下列的生命周期來運行的:(1)當終端發(fā)出了MIDlet的運行命令時,若編寫于JAD文件MIDlet有多個的時候,就讓其進行選擇后啟動MIDlet。(2)MIDlet的Constructor被調(diào)用。(3)MIDlet#startAPP()方法被調(diào)用,啟動MIDlet。(4)在終端有來電的時候MIDlet#startAPP()方法就會被調(diào)用,并讓MIDlet暫停。(5)當通話結(jié)束等的時候,就再次調(diào)用MIDlet#starAPP()方法,MIDlet就會再次啟動。(6)調(diào)用MIDlet#destoryAPP(boolean)方法,以將MIDlet結(jié)束。如圖4.2 : 4.2.4 MIDlet的畫面顯示基礎(chǔ)MIDlet類本身由于并沒有提供直接操作畫面顯示的功能,因此在MIDlet類的子類也沒有直接操作畫面顯示的功能。因此,要使用管理畫面顯示功能的Display類。這個Display類可以讓javax.microedition.lcdui.Displayable類的子類顯示在畫面上。開始按下重新啟動按鈕?顯示暫停界面顯示關(guān)卡結(jié)束界面顯示標題界面按下結(jié)束按鈕?按下自動按鈕?1結(jié)束21顯示關(guān)卡啟動界面顯示關(guān)卡游戲界面按下停止按鈕?按下暫停按鈕?過關(guān)玩家的勝利?全關(guān)卡過關(guān)?2顯示關(guān)卡結(jié)束界面2顯示游戲結(jié)束界面2YesNoYesYesYesYesNoNoNoYesYesNoNo 圖4.1 游戲的流程圖Fig 4.1. The flow chart of gamesnew()PausedPausedDestroyedDestoryApp()PauseApp()StartApp()DestroyApp() 圖4.2 MIDlet的生命周期Fig 4.2 .The life cycle of MIDletsDisplayable類的子類大致來說可以分為兩種,分別用來進行線與圖形、圖像的低級描繪類,與用來顯示警告與文本的輸入、選擇列表等UI組件類。前者是指javax.microedition.lcdui.Canvaslei類,用來進行低級描繪。后者是指其中的javax.microedition.lcdui.Screen類與其子類(Alert、Form、List、TextBox類等)。Displayable類與子類之間的關(guān)系如圖4.34.2.5 游戲項目的創(chuàng)建在J2MEWTK當中,是以項目這個單位來管理MIDletSuite,因此在進行程序編寫前必須先要創(chuàng)建項目。首先要將項目取名為SimpleMIDlet。在Windows“開始”菜單啟動J2MEWTK的KToolbar,啟動之后,單擊“New project”按鈕。然后在“New project”對話框的“project Name”與“MIDlet Class Name”的文本框輸入項目的名稱“Pocket Boxing”,并單擊“Create project”按鈕。這樣就完成了對游戲項目的創(chuàng)建。ObjectDisplayableCanvasScreenAlertFormListTextBox圖4.3 Displayable類與子類類圖Fig 4.3. Displayable and a Son diagram接著就要對程序進行編譯了,說到編寫程序代碼首先要提到支持J2ME的開發(fā)工具。我用到的開發(fā)工具是Borland公司推出的開發(fā)工具JBuilder9企業(yè)版。其功能非常強大,不僅可以集成化的編碼、調(diào)試,還可以進行應(yīng)用發(fā)布,網(wǎng)絡(luò)調(diào)試以及版本控制等等,是一個非常不錯的開發(fā)工具。4.2.6 命令種類及命令處理這個游戲中要定義的命令,一共有使用在標題畫面的Start、Exit命令與使用在游戲中的Pause、Resume、Quit命令共計五種。下面是這五種命令變量的程序代碼:/*Start命令變量*/ Private Command startCmd=new Command (“Start”, command. SCREEN, 5);/*Exit命令變量*/ Private Command exitCmd=new Command (“Exit”, command. SCREEN, 1);如圖4.5 圖4.5游戲開始界面 /*Pause命令變量*/Private Command pauseCmd=new Command (“Pause”, command. SCREEN, 5);/*Resume命令變量*/Private Command resumeCmd=new Command (“Resume”, command. SCREEN, 5);/*Quit命令變量*/ Private Command quitCmd=new Command (“Quit”, command. SCREEN, 1);如圖4.6: 圖4.6游戲暫停畫面4.2.7 游戲中的描繪處理進行描繪的doDraw( Graphics g )方法,將會在Game Canvas類進行描繪時被調(diào)用出來。描繪位置會在Game Canvas類中先使用Set Draw X( int x )和Set Draw Y(int y)方法來預(yù)先指定。在決定畫面位置的時候,由于拳擊手圖像只有上半身,因此必須將圖像的下半部分設(shè)置在畫面的最下方。因此,就要準備能返回圖像高度的get Height()方法。另外,在被擊倒的時候由于是以拳擊手倒在地下為前提,因此將什么都不描繪。描繪處理的程序代碼如下: /*存儲了描繪開始的X坐標的變量*/ Protected int draw X ; /*存儲了描繪開始的Y坐標的變量*/ Protected int draw Y ; /* * 設(shè)置用來進行描繪的X坐標的方法 * Param x 進行描繪的X坐標 */ Void set draw X ( int x ) this. drawX=x ; /* * 設(shè)置用來進行描繪的Y坐標的方法 * Param y 進行描繪的Y坐標 */ Void set draw Y( int y ) this. drawY=y ; /* * 返回圖像高度的方法 * return int 進行描繪的圖像高度 */ int get Height() /返回身體圖像的高度 return images0. Get Height() ; 以上是對Boxer進行的描繪,在Enemy類繼承了在功能方面幾乎相同的Boxer類,并承續(xù)其功能改寫了get Imagepaths()方法與doDraw( Graphics g )方法,更改為進行了圖像的獲取以及與玩家位置相反的方向描繪。在Constructor當中,就會調(diào)用出Boxer類的Constructor,并進行圖像的讀取。4.2.8 游戲狀態(tài)的類變量在游戲中,在Game Canvas類中定義表現(xiàn)游戲狀態(tài)的類變量。要實現(xiàn)的變量將包括:標題、回合開始、回合中、回合結(jié)束、全部回合結(jié)束等變量。程序代碼:/* 代表標題顯示狀態(tài)的常量 */ Private static final short TITLE =0 ;/* 代表回合開始顯示狀態(tài)的常量 */ 如圖4.7 圖4.7回合開始畫面 Private static final short ROUND_START =1 ;/* 代表比賽中顯示狀態(tài)的常量 */ 如圖4.8 圖4.8比賽中畫面 Private static final short FIGHTING =2 ;/* 代表回合結(jié)束顯示狀態(tài)的常量 */如圖4.9 圖4.9回合結(jié)束畫面Private static final short ROUND_END =9 ;/* 代表回合過關(guān)狀態(tài)的常量 */如圖4.10 圖4.10回合過關(guān)畫面Private static final short ALL_ROUND_CLEAR =10 ;另外,除了上述提到的五種狀態(tài)變量,還涉及到了代表存儲現(xiàn)在狀態(tài)的變量(game state)與暫停狀態(tài)的標識(ispaused)。代碼如下:/* 存儲現(xiàn)在顯示狀態(tài)的變量 */ Private short gamestate ;/* 代表暫停狀態(tài)的標志 */ Private Boolean ispaused ;4.2.9 按鍵事件的處理在進行按鍵處理的key Pressed方法中,當不是在回合中的時候或是在回合中但暫停中的時候,由于沒有必要所以不進行處理。除此之外,在拳擊中也不進行任何的處理,這是因為如果在拳擊當中若能做出其他動作的話會非常奇怪。當都不符合以上條件時,就要根據(jù)所按下的數(shù)字按鍵來更改使用者的狀態(tài)。在這款游戲中按鍵是這樣分配的:“1”后退、“4”后退、“2”上方防御、“5”下方防御、“3”上方攻擊、“6”下方攻擊。當為上方攻擊和下方攻擊時,就要調(diào)用出doLifepointCheck4 Enemy( )方法來根據(jù)對手的狀態(tài)減少生命點數(shù),然后根據(jù)生命點數(shù)的剩余量來結(jié)束回合。6.2 J2ME手機游戲的開發(fā)意義 我們對于電腦游戲已經(jīng)熟知,所以如果以這個標準來衡量手機游戲,那么手機在某種程度上可以看作是小型的計算機,它的處理能力與臺式電腦的標準處理能力相比雖然很有限,但是已經(jīng)能夠運行一些小型的游戲。 現(xiàn)在全世界手機用戶很多,甚至已經(jīng)超過電腦的普及率,并且手機更新?lián)Q代的速度絕不比電腦差多少。所以手機游戲已經(jīng)具有了它成長的基礎(chǔ),這個基礎(chǔ)要比當年的電腦游戲穩(wěn)固得多。無線應(yīng)用協(xié)議( WAP )手機已經(jīng)成為目前手機市場的主流,基于WAP的游戲本質(zhì)上是一個靜態(tài)瀏覽載體,非常像一個簡化的Web,是為移動電話小型特征和低帶寬而專門優(yōu)化的。要玩WAP游戲的話,要進入游戲供應(yīng)商的URL( 通常通過移 動運營商門戶網(wǎng)站的一個鏈接 ),下載并瀏覽一個或多個頁面,選擇一個菜單或者輸入文字,提交數(shù)據(jù)到服務(wù)器,然后瀏覽更多的頁面。WAP( 1.x )版本使用獨特的標記語言WML

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論