freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于j2me技術的手機游戲開發(fā)(編輯修改稿)

2024-12-18 15:30 本頁面
 

【文章內(nèi)容簡介】 TPS協(xié)議、串口通信、 Socket 通信、 UDP 協(xié)議。 J2ME擴展包技術更是使得擴展 GCF后能夠使用 Java編寫手機藍牙、紅外、 USB等通信程序。 GCF本身是一個基于 Java語言接口技術的框架 。 圖 8 GCF 框架 3 游戲實現(xiàn) 游戲設有多個關卡,每個關卡中 青蛙都有不同的任務:在第一關中,跳躍的青蛙從底 部 12 開始,要在規(guī)定的 90 秒中通過 3 條馬路到達頂部的目的地,每條馬路上都有一個道具要撿取,馬路上是行使的各種汽車,青蛙不能碰撞到汽車,不然就丟掉一次機會,要重新回到起點開始,第一關一共有三次重試機會。 圖 9 游戲第一關 創(chuàng)建項目 與 應用程序管理器 在下載和安裝已經(jīng)發(fā)布的 Java 手機程序時都是以單個 MIDlet Suite( MIDP 程序套件)作為單位的 , 每個 MIDlet Suite 包含一個或者多個 MlDlet 程序 , 作為對 MIDlet 進行簽名時也是以 MIDlet Suite 為單位的,數(shù)據(jù)共享、用戶配置數(shù)據(jù)、持久存儲等都能在同一個 MIDlet Suite 中共享,發(fā)布程序時以每個 MIDlet Suite 進行打包成 JAR 文件(一般同時間創(chuàng)建一個相應的 jad 文件來描述該 JAR 文件,在網(wǎng)絡環(huán)境中需要提供 JAR 文件發(fā)送到互聯(lián)網(wǎng)上供用戶下載)。 在 J2ME 游戲創(chuàng)建 MIDlet Suite:創(chuàng)建一個名稱為 Frogger 的移動應用程序項目,便于在 IDE 中管理項目資源,項目目錄結構如下 [4]: Frogger/ 項目各種操作配置文件,如運行、測試、重點配置 j2mepolish對象,描述各種各種擴展元素 source/src/ 游戲源碼存放位置 resources/ 存放游戲資源文件位置,如:圖片、字體等 nbproject/ NetBeans 項目描述文件 dist/ 最終分發(fā)打包程序存放位置 build/ 目的地 汽車障礙 道具 起點,青蛙 13 再創(chuàng)建一個名稱為 類做為游戲主類繼承 :所有的 MID 應用程序主類都必需繼承自 MIDlet 類 。 MIDlet 實際上是 一個應用程序管理器(AMS)的接口, 實際程序中 通過 實現(xiàn) MIDlet 類的 startApp()、 pauseApp()和 destroyApp()方法 來管理 整個 程序的生命周期: 圖 10 MIDlet 程序的狀態(tài)轉換 下面是游戲的主類: // 引入相關的類包 import 。 import .* public class Frogger extends MIDlet implements CommandListener { private Display display。 // 其它代碼略:這里主要聲明 Frogger 類用到成員變量,和整個游戲的全程對象 private final List mainMenu。 public Frogger(){ super()。 // 程序管理器構造 = new List(Frogger, )。 } // 開始運行游戲 protected void startApp(){ = ( this )。 ( )。 } protected void pauseApp( ) { } 14 protected void destroyApp(boolean unconditional){ } public void mandAction( Command cmd, Displayable screen ) { } } 這里只是一個最基本的 MIDlet 子類, 它的任務主要是啟動游戲并創(chuàng)建一個菜單顯示到屏幕上 。 CSS 菜單設計 啟動游戲時,首先展示一個啟動畫面和主菜單。這是用戶對游戲的第一印象,必須要力求精美。在這個游戲中我用 CSS(層疊樣式表 )來定制 UI 組件的:使用網(wǎng)頁制作工具為不同的手機制作不同外觀的菜單,下圖展示了為不同手機設計的菜單: 圖 11 不同機型 菜單 風格 截圖 :左,默 認風格, 右,SonyEricsson/K700 首先在 j2mepolish標簽:定義 build元素的 usePolishGui屬性為 ture,使編譯時支持 CSS。再在程序中添加預處理項,如: ////Frogger類中 游戲 主要 導航菜單 、設置 CSS預處理 : //style mainScreen = new List( Frogger, )。 //style mainMenuItem ( ( ), null)。 //style mainMenuItem ( ( ), null)。 //style mainMenuItem ( ( ), null)。 //style mainMenuItem ( ( ), null)。 這樣就可以在資源文件中隨意的定義 CSS外觀 , resources/義的默認屬性,其中的列表 CSS屬性將得到上面右幅圖的菜單項效果: 15 //例如 mainMenuItem的 CSS風格定義 .mainMenuItem { margin: 2。 padding: 5。 background: none。 /**獲得菜單項背景透明效果 **/ fontcolor: fontColor。 fontstyle: bold。 fontsize: small。 layout: center。 checkboxplain: none。 checkboxselected: url()。 } 游戲屏幕處理 FroggerScreen 類是游戲的核心,它控制循環(huán)操作,包括青蛙的移動,圖像的繪制以及讀取和響應用戶的輸入。通常連續(xù)的刷新屏幕會使得屏幕圖像效果不穩(wěn)定,出現(xiàn)如閃爍等情況,而及時的按鍵響應對本游戲更為重要,這里需要使用游戲設計中兩個重要的概念 [5]: ● 雙緩沖屏幕操作 ● 實時按鍵響應(包括組合按鍵操 作) J2ME 為優(yōu)化設計為這兩種操作提供了本地 API: J2ME Game API。 FroggerScreen 繼承了 GameCanvas 類。繪制操作自動將下一屏幕繪制到脫機屏幕上,然后使用 flushGraphics()直接把圖像從脫機屏幕上拷貝到當前屏幕上。 getKeyStates()同時間偵測從上一次操作后的多個游戲按鍵的狀態(tài),使得按鍵不被“遺忘”,這樣保證了操作處理的實時性,甚至可以模擬游戲操作性極強的組合按鍵使用。如果需要抑制主某些時間段的按鍵操作,只需要使用簡單的背對背調(diào)用就可以了。設計 Frogger 類: public class FroggerScreen extends GameCanvas implements Runnable { public FroggerScreen( Frogger midlet ) { super( true )。 } //開始游戲 public void start() { Thread thread = new Thread( this )。 ()。 } public void run() { 16 int keyState = getKeyStates()。 if (keyState != 0) { // 處理按鍵狀態(tài) } // 刷新屏幕 : flushGraphics()。 } } 游戲引擎設計 任何游戲的核心都不過是用來完成各種游戲任務的一個循環(huán) ,在這個游戲里 就是移動的車輛,玩家 , 檢測玩家輸入 , 檢測碰撞情況:將所有的東西渲染到 LCD 屏幕上 ,但是需要足夠快的速度, 使的玩家有一種真實感。 為了實 現(xiàn)這個,我們需要使用 游戲循環(huán)的東西:任何需要處理的任務都是游戲循環(huán)的一部分,通常把每秒種循環(huán)次數(shù)稱為 CPS(cycles per second)及幀率 , 也有的稱為 FPS(frames per second) 。 為了實現(xiàn)游戲循環(huán),需要一個獨立于應用程序的執(zhí)行進程 ,這樣才能對它進行控制 (如暫停程序 )。在 Java 中通常有兩種方法可以實現(xiàn): 定時器 與線程。 ● 定時器 的 GameCanvas 為我們提供了 getKeyStates()主動按鍵查詢功能 , 可以主動處理按鍵動作,通過 TimerTask 與 Timer 類的配合來模擬多線程, 可以很方便的開啟多個線程,并且代碼的結構比較清晰,但是創(chuàng)建類的數(shù)量比較多,系統(tǒng)開銷稍微大一些。下面詳細進行一下介紹 : Timer 類是一個定時器,可以每隔一段固定的時間做一件事情,而且可以很方便的停止這些動作。依次為:構造對象: Timer timer = new Timer(); 對象創(chuàng)建以后,可以使用其中的 schedule 或者是 scheduleAtFixedRate 方法起啟動一個任務 (Task)動作。需要停止時,可以調(diào)用 Timer 對象的 cancel 方法實現(xiàn),該方法可以停止該 Timer 啟動的所有任務 (Task)。 TimerTask 類是一個線程類,所有線程的動作代碼都寫在該類內(nèi)部。 TimerTask是一個抽象類,在實際使用過程中,一般是繼承 TimerTask類,然后實現(xiàn)實際的操作,停止 TimerTask 可以使用 TimerTask 對象里面的 cancel方法 。 ● 線程 通過 Thread 類或 Runnable 接口 實現(xiàn)類的多線程操作控制循環(huán) , 游戲使用了 Runnable接口: ()方法使得線程方法更容易在游戲中控制穩(wěn)定的幀率。將幀速率控制程序段加入到 Frogger 類 中: //設置游戲每秒鐘最大循環(huán)次數(shù)為 30 private final static int MAX_FRAMES_PER_SECOND = 30。 17 //計算每秒鐘循環(huán)的時間為 1000/30 =33ms private final static int TIME_PER_FRAME = 1000 / MAX_FRAMES_PER_SECOND。 //在主循環(huán)中控制游戲的幀速率 public void run() { long lastCycleTime = ()。 long cycleStartTime。 while (!) { //標記循環(huán)開始時間 cycleStartTime = ()。 // move players and actors: int keyState = getKeyStates()。 if (keyState != 0) { //處理按鍵 } lastCycleTime = ()。 // 繪制脫機屏幕 : (, 0, 0 )。 // 刷新屏幕 : flushGraphics()。 // 計算需要 sleep()的時間 : long timeForFrame = () cycleStartTime。 if (timeForFrame TIME_PER_FRAME ) { try { ( TIME_PER_FRAME timeForFrame )。 } catch (InterruptedException e) { } } } } 制作二進制數(shù)組地圖 、關卡初始化文件 由于 《青蛙遠行》 是一款關卡類游戲, 每進入一關都存在大量的可重用的初始化代碼,考慮將這些數(shù)據(jù)放入二進制文件 。 這樣每進入一關只需要讀取 相應的初始化文件進行關卡初始化即可,如地圖的創(chuàng)建、玩家坐標等等 [6]。 這樣的設計為游戲節(jié)約了大量的代碼段中間 ,即所有的關卡只需要一份代碼,而且關卡的編輯和調(diào)試也相當簡單:不需要修改任何代碼,只要修改被讀如的文件即可。 18 圖 12 用二進制編輯器編輯 level1 的關卡數(shù)據(jù) 本游戲使用 J2ME Polish binaryeditor 進行編輯,將關卡地圖和其它只讀數(shù)據(jù)都采用這種靈活的方式存儲: 定義每關公有的初始化數(shù)據(jù),如重試次數(shù)、青蛙跳躍距離等 level[關卡序號 ].data 定義每關特有的初始化
點擊復制文檔內(nèi)容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1