999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于J2ME手機飛機飛行游戲的設計與開發

2013-04-29 00:00:00劉建
中國新通信 2013年10期

【摘要】隨著手機的日益普及、Java功能在移動設備上的實現,本論文利用J2ME技術,設計了一款可商用的手機游戲程序,以及介紹了J2ME的相關技術及本程序的結構分析和具體功能的實現,為更流行的硬件平臺提供應用參考。

【關鍵詞】J2ME手機飛行游戲

一、引言

在信息社會中,手機及其他無線設備越來越多的走進普通百姓的工作和生活,隨著信息網絡化的不斷進展,手機及其他無線設備上網絡勢在必行。但是傳統手機存在以下弊端:傳統手機出廠時均由硬件廠商固化程序;傳統手機訪問網絡資源必須接通網絡才能在線訪問,非常耗時、費用亦很高。而Java技術在無線應用方面的優勢非常明顯:應用程序可按需下載,而不是購買由硬件商提供的套件,可升級空間大;Java技術提供了一個類庫,它使的應用開發商可以創建更為直覺、豐富的用戶界面(GUI);Java技術使網絡帶寬的應用更為有效,因為應用程序可以下載到器件上,并在本地運行,僅僅是在連接到服務器時才會占用網絡帶寬。

二、J2ME技術

Java平臺演進到Java2后,Java平臺分別針對不同領域的需求被分成四個版本,亦即J2EE、J2SE、J2ME以及JavaCard。其中J2ME定位在消費性電子產品的應用上。這個版本針對資源有限的電子消費產品的需求精簡核心類庫,并提供了模塊化的架構讓不同類型產品能夠隨時增加支持的能力。這個版本的應用層面相當廣泛,會是未來Java平臺發展的重點項目。

J2ME在1999年的JavaOne開發人員大會上初次亮相,它的目標是面向智能無線設備和小型計算機設備的開發人員。J2ME的一個關鍵優點是,J2ME與所有支持Java的設備都是兼容的。支持Java的設備就是任何運行Java虛擬機器的計算機。Motorola、Nokia等生產廠商都生產支持Java的設備。

目前,J2ME中有兩個最主要的配置,分別是Connected Limited Devices Configuration(CLDC)和Connected Devices Configuration(CDC)。

作為第一個面對小型設備的Java應用開發規范,CLDC是由包括Nokia,Motorola和Siemens在內的18家全球知名公司共同協商完成的。CLDC是J2ME核心配置中的一個,可以支持一個或多個profile。其目標主要面向小型的、網絡連接速度慢、能源有限(主要是電池供電)且資源有限的設備,如手機、PDA等。

三、游戲設計

3.1本程序需要解決的主要技術問題

游戲程序是一項精度要求很高的程序系統,因為其代碼利用率很高。一個實時運行的最終作品,每秒都會運行成千上萬行程序,繪圖事件、鍵盤事件都會以極高的頻率在后臺等待響應,若有絲毫的差別都將很容易導致程序在運行不久后可能出現嚴重錯誤,甚至死循環。因此,其邏輯設計應當相當嚴謹,需將所有可能發生的事件及意外情況考慮在設計中。

游戲中為了美觀,適用性強,可能需要采用外部文件引入的圖片貼圖,有關貼圖,在MIDP2.0中提供了用于增強游戲功能的game包,使得解決靜態或動態、畫面背景、屏幕刷新的雙緩沖等都有較好的解決方案。

玩家飛機的運行可以通過鍵盤響應事件控制,但敵方則因為是自動運行,就需要有一定的智能性;敵人飛機的運行算法也要進行相關的設置,已免游戲過于簡單。

對于雙方發射的子彈應該賦予不同的速度,同時,程序應該設定敵人飛機的子彈不與敵人的飛機進行碰撞檢測,已增加游戲的可玩性。

雙方的飛機在前進時也需要考慮到是否碰撞到對方飛機,以免重疊運行,造成許多物理上不可能的情況,缺乏真實感。每一次刷新頁面、每前進一步都需要進行相關的碰撞檢測。

為了增加界面的美觀,在程序中添加了白云。由于手機屏幕大小有限,所以白云的數量和出現的位置要經過相關的設置,才能實現白云不規則出現的效果。

游戲的地圖不可能通過繪圖來解決。否則,不僅難于控制和處理過多的元素,也會因過多的大型圖片而不能限制程序的大小,失去手機上程序的原則和Java的優勢。

Java是基于虛擬機的半解釋型編譯系統,其執行效率較C++等完全編譯后的程序會低很多,程序如果不進行精簡和優化,將可能導致運行的不流暢。除開發過程中對結構上的控制、變量的使用、算法的優化等優化外,還可以使用混淆器(Obfuscator)進行程序打包后的優化。

游戲的結束、開始、動態信息畫面作為構成一個程序都是必不可少的重要部分。良好的用戶界面更是吸引用戶的硬指標,相關的美術構圖和人性化設置也需要有一定的考慮。

以上相關技術細節和整體流程將分別在以下小節闡述。

3.2程序流程

MIDlet suite是MIDP應用程序的最小單位,JAM負責將手機內的MIDlet suite以圖形化的方式呈現,讓用戶能夠選取欲執行的MIDlet suite,一旦選取了某個MIDlet suite,操作系統就會激活KVM執行里面的MIDlet。MIDlet及相關的支持類組成了MIDP應用程序的實際內容。而每個MIDlet都必須繼承javax.microedition.midlet.MIDlet這個抽象類。在MIDP規范中定義了MIDlet的生命周期,以及可以存在的三種狀態,包括Paused、Active以及Destroyed,每一個MIDlet在任何時刻只可能處于其中的一個狀態。這三種狀態的轉換關系如圖1所示:MIDlet有三個狀態,分別是pause、active和destroyed。

在啟動一個MIDlet的時候,應用管理軟件會首先創建一個MIDlet實例并使得他處于pause狀態,當startApp( )方法被調用的時候MIDlet進入active狀態,也就是所說的運行狀態。在active狀態調用destroyApp (boolean unconditional)或者pauseApp( )方法可以使得MIDlet進入destroyed或者pause狀態。值得一提的是destroyApp(boolean unconditional)方法,事實上,當destroyApp( )方法被調用的時候,AMS通知MIDlet進入destroyed狀態。在destroyed狀態的MIDlet必須釋放了所有的資源,并且保存了數據。如果unconditional為1的時候,MIDlet可以在接到通知后拋出MIDletStateChangeException而保持在當前狀態,如果設置為true的話,則必須立即進入destroyed狀態。

本程序采用面向對象的設計模式,對游戲中的所有物體賦予對象的概念和屬性。運行程序后允許用戶選擇執行選項菜單,在開始游戲后將先從外部文件載入地圖文件,對背景的所有物體進行繪圖。在主程序運行的線程中,畫面刷新將以一定的頻率采用雙緩沖技術對屏幕重繪,實時反映整個游戲的進行狀態。

游戲開始后先繪制地圖,并將各個對象實例化。在主程序運行的線程中,游戲中所有的對象都應該運行在同一個線程下。當敵人或者用戶的子彈達到射程范圍后,并不刪除子彈對象,而是使用setVisable(1)使其不能顯示,當用戶或敵人再次發射子彈時,只需使用setVisable(true)設置成可以顯示即可。在屏幕重繪的主程序中,將在每次的循環中判斷若干事件,以便程序進入相關的分支執行相關的反應代碼。

程序為需要完成獨立功能的模塊設置了單獨的類。 lzhhdm類繼承自Midlet,gameScrenn類、MenuScreen類繼承自GameCanvas,mybullets繼承自Sprite類。載入程序后首先啟動的是程序介紹的信息畫面。點擊ok后調用MenuScreen類實現菜單。

如果選擇進入游戲,則調用gameScreen類,并且中止MenuScreen類中的線程運行,已提高運行速度。

Mybullets類為玩家子彈類。

四、游戲的實現

游戲實現界面如2圖所示,下面針對幾個比較重要的類進行簡單介紹。

游戲主類gameScreen類是游戲控制的基本類,是控制游戲各個模塊的監聽類,決定著敵人何時出現,控制著敵人出現的方法,判斷敵人及玩家是否被擊中等。它運行在獨立的線程中,以恒定的頻率刷新畫面。

Mybullets類繼承自Sprite類,以實現玩家子彈的相關功能。首先,創建子彈狀態數組private int[][] bullets,其中,[i][0]代表子彈的X坐標,[i][1]代表子彈的Y坐標,[i][2]代表子彈Y方向速度,[i][3]代表子彈存活狀態。類中定義的方法setfirstposition( )起到定義玩家子彈發射坐標的作。方法newposition( )實現的功能為更新玩家的子彈位置,并且檢測玩家子彈與普通敵人的碰撞及記錄玩家戰果。mybullets類在gameScreen中建立了對象數組huokebullet[9],代表玩家所能發射的9發子彈。

使用createBackGround ( )函數創建地圖數組時,用(row+1)*16-getHeight( )語句對整型變量row2賦值,其中row+1代表地圖有多少列,16為地圖片的高度,而減去getHeight ( )是因為要留出一個屏幕的可視區域,由于J2ME規定坐標系中下方向為正,所以使用語句y1=-row2將row2的數值變為負數。

每個創建Command實例的J2ME的應用程序也必須創建實現CommandListener接口的實例。每當用戶通過commandAction( )方法的方式與命令進行交互的時候,就會通過CommandLIstener.所以實現CommandListener的類必須實現commandAction( )方法。

當玩家通關時或者任務失敗時,將顯示相應信息,并使用上面的方法將“暫停”鍵變為“返回”鍵盤,當點擊“返回”鍵時,將返回主菜單選項,調用類lzhhdm里的方法menuscreensecond( ),在此方法中,實例化一個MenuScreen類對象,并且使選項“新游戲”改變為“重新開始”。完成此項功能的語句子為MenuScreen.mainmenu [0] =“重新開始”。當選擇“重新開始”時,使用gamescreen=new gameScreen(this)將使所有變量重新被初始化,如地圖的繪制、敵人出現位置的重置、敵人的數量、玩家飛機的當前位置等。使用gamescreen.start( )重新開始程序的循環。

五、結論

本文設計了完整的以J2ME為平臺的飛行射擊游戲的開發,游戲運行的方式由程序進行控制,具有一定的可玩性和復雜性。經過了細心的調試和排錯解決了絕大部分的問題,對J2ME游戲開發有著一定指導作用。

參考文獻

[1] Joshua Bloce著.潘愛民譯. Effective Java中文版.2004年7月第4版.機械工業出版社.

[2] Bruce Eckel.侯捷譯.Java編程思想. 2005年3月第1版.機械工業出版社出版社

[3]王森著.Java手機/PDA程序設計入門.2005年2月第3版.電子工業出版社.

[4] James Keogh著.潘穎王磊譯.J2ME開發大全.2004年2月第1版清華大學出版社.

[5] Ian Sommerville著.程成等譯.軟件工程.2003年1月第1版.機械工業出版社.

[6]陳立偉張克非黎秀紅著.精通JAVA手機游戲與應用程序設計.中國青年出版社,2005年5月

[7]飛思科技產品研發中心.精通Jbuilder9.電子工業出版社,2004年

主站蜘蛛池模板: 久热99这里只有精品视频6| 国产永久在线视频| 呦系列视频一区二区三区| 中文字幕 欧美日韩| 国产麻豆福利av在线播放| 免费视频在线2021入口| 无码免费的亚洲视频| 免费午夜无码18禁无码影院| 久久国产高潮流白浆免费观看| A级全黄试看30分钟小视频| 亚洲αv毛片| 潮喷在线无码白浆| 国产熟女一级毛片| 国产精品13页| 亚洲精品国产综合99| 97一区二区在线播放| 爱做久久久久久| 欧美笫一页| 91色综合综合热五月激情| 国产精品视频3p| 毛片免费试看| 国产精品第三页在线看| 制服丝袜国产精品| 国产毛片片精品天天看视频| 91久久偷偷做嫩草影院电| 亚洲人成网站在线观看播放不卡| 免费观看成人久久网免费观看| 五月天天天色| 亚洲精品日产AⅤ| 狼友av永久网站免费观看| 国产精品专区第1页| 五月丁香伊人啪啪手机免费观看| 亚洲高清无码精品| 日韩亚洲高清一区二区| 欧美成人免费午夜全| 亚洲swag精品自拍一区| 久久无码av三级| 亚洲制服丝袜第一页| 亚洲视频欧美不卡| 亚洲国产中文欧美在线人成大黄瓜 | 亚洲一道AV无码午夜福利| 国产毛片高清一级国语| 国产精品无码久久久久久| 欧美国产日韩在线播放| 99视频全部免费| 国产91特黄特色A级毛片| 国产精品美女网站| 国产精品亚洲专区一区| 99视频免费观看| 波多野结衣无码AV在线| 伦精品一区二区三区视频| 国产精品视频导航| 欧美啪啪一区| 欧美一级在线看| 新SSS无码手机在线观看| 成人福利在线免费观看| 成人在线观看一区| 亚洲另类色| 亚洲 日韩 激情 无码 中出| 国产福利免费视频| 国产成人精品午夜视频'| 亚洲综合色婷婷中文字幕| 亚洲第一视频免费在线| 一级爱做片免费观看久久 | 国产一区二区人大臿蕉香蕉| 国产导航在线| 一本大道在线一本久道| 国产麻豆福利av在线播放| 午夜日b视频| 欧美日韩导航| 国产簧片免费在线播放| 成人午夜视频免费看欧美| 99热这里只有精品免费国产| 亚洲无限乱码一二三四区| 国内自拍久第一页| 欧美精品v| 国产乱人激情H在线观看| 亚洲精品无码人妻无码| 午夜福利在线观看入口| 国产性精品| 久久久久久久久久国产精品| 欧美在线精品一区二区三区|