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

正文內(nèi)容

基于j2me技術(shù)的手機游戲開發(fā)-在線瀏覽

2025-01-15 15:30本頁面
  

【正文】 事件以及在設(shè)備顯示屏中繪制圖像和文字,如在 Canvas 上繪制、 Command 事件、 Keycode事件、 Game操作事件、 Pointer 事件。 圖 3 一個 Ticker UI 例子 ● 高層 API Screen 及其子類 Screen對象本身在設(shè)備上并不可見,但是所有的高層組件都由其派生派生出來,最終用戶與所顯示的這些子類進行交互。 ● 功能強大的 Game API 游戲開發(fā)中必需使用大量的動畫效果,如果手工編碼需要大量而復(fù)雜的代碼,既耗損寶貴的 JAVA 空間、提高了開發(fā)的難度,更重要的是本機碼速度相比于 jar 代碼 的運行速度要快得多 ,所以 MIDP 專為游戲開發(fā)定制了 包,為我們提供了游戲的基礎(chǔ)框架及模板類,這些類由于交由各廠商本地實現(xiàn),得到了相當大的優(yōu)化, 級大的 簡化游戲開發(fā)和提高了游戲的性能。 ● J2ME 與 3D 雖然 3D 游戲?qū)τ谠O(shè)備的要求不是現(xiàn)在的手機能夠滿足的,但是由于 3D 游戲?qū)τ谌藗兊奈χ螅袌錾弦呀?jīng)有了多款不錯的 3D手機,如 Sony Ericsson S700/K700/Z500 等,J2ME 3D必將成為 JAVA手機的下一個重大應(yīng)用 , JSR184( Mobile 3D Graphics API for J2ME 規(guī)范) API提供了 3D 場景的基本開發(fā)模式:快速模式與保留模式 。 JAVA3D 的場景圖是 DAG( Directedacyclic Graph),即具有方向 性的不對稱圖形。在 JAVA3D 的場景圖中,最底層(根部)的節(jié)點是 Virtual Universe,每一個場景圖只 能有一個 Virtual Universe。當然我們可以從一個景點跳到另一個景點,不過絕大多數(shù)程序只有一個 Locale。我們知道,要想建立我們的三維應(yīng)用環(huán)境,我們必須建立所需要的形體( Shape),給出形體的外觀( Appearance)及幾何信息( Geometry),再把它們擺放在合適的位置,這些形體及其擺放位置都建立在 Branch Group 節(jié)點之上,擺放位置通過另一個節(jié)點TransformGroup 來設(shè)定。下面我們用一個示意圖來說明上面我們介紹的 Java 3D 的場景圖概念。用戶輸入相當重要,它在玩家和用戶之間建立起主要的接口, J2ME對按鍵輸入提供支持 , 這是當前手機的唯一輸入方式。 在 Game API 中 getKeyStates()的主動查詢支持對于手機游戲編程相當重要,這樣保持了高度的反應(yīng)靈敏度 。返回一個整數(shù)值,通過常量匹配判斷結(jié)果,這樣也可以模擬出組合大絕招 , 如: int keyState =getKeyStates()。LEFT_KEY)!=0)||((keyStateamp。 Game API 為碰撞檢測提供了本地支持, collidesWith()方法既可以檢測基于矩形框的碰撞又可以精確檢測象素級的碰撞,檢測范圍包括: Sprite vs Sprite Sprite vs Image Sprite vs TiledLayer 聲音 游戲開發(fā)的第三大事件就是聲音 ,手機雖小,但是通過使用耳機可以聽 高質(zhì)量的音樂,視頻也已經(jīng)有了手機電視等應(yīng)用,所有聲音支持仍然相當重要。 byte tempo = 30。 // eighthnote byte C4 = 。 // a whole step byte E4 = (byte)(C4 + 4)。 // a fifth byte rest = 。 String[] contantType =(null)。i。 ()。 (seq2)。 ()。 J2ME擴展包技術(shù)更是使得擴展 GCF后能夠使用 Java編寫手機藍牙、紅外、 USB等通信程序。 圖 8 GCF 框架 3 游戲?qū)崿F(xiàn) 游戲設(shè)有多個關(guān)卡,每個關(guān)卡中 青蛙都有不同的任務(wù):在第一關(guān)中,跳躍的青蛙從底 部 12 開始,要在規(guī)定的 90 秒中通過 3 條馬路到達頂部的目的地,每條馬路上都有一個道具要撿取,馬路上是行使的各種汽車,青蛙不能碰撞到汽車,不然就丟掉一次機會,要重新回到起點開始,第一關(guān)一共有三次重試機會。 在 J2ME 游戲創(chuàng)建 MIDlet Suite:創(chuàng)建一個名稱為 Frogger 的移動應(yīng)用程序項目,便于在 IDE 中管理項目資源,項目目錄結(jié)構(gòu)如下 [4]: Frogger/ 項目各種操作配置文件,如運行、測試、重點配置 j2mepolish對象,描述各種各種擴展元素 source/src/ 游戲源碼存放位置 resources/ 存放游戲資源文件位置,如:圖片、字體等 nbproject/ NetBeans 項目描述文件 dist/ 最終分發(fā)打包程序存放位置 build/ 目的地 汽車障礙 道具 起點,青蛙 13 再創(chuàng)建一個名稱為 類做為游戲主類繼承 :所有的 MID 應(yīng)用程序主類都必需繼承自 MIDlet 類 。 import .* public class Frogger extends MIDlet implements CommandListener { private Display display。 public Frogger(){ super()。 } // 開始運行游戲 protected void startApp(){ = ( this )。 } protected void pauseApp( ) { } 14 protected void destroyApp(boolean unconditional){ } public void mandAction( Command cmd, Displayable screen ) { } } 這里只是一個最基本的 MIDlet 子類, 它的任務(wù)主要是啟動游戲并創(chuàng)建一個菜單顯示到屏幕上 。這是用戶對游戲的第一印象,必須要力求精美。再在程序中添加預(yù)處理項,如: ////Frogger類中 游戲 主要 導航菜單 、設(shè)置 CSS預(yù)處理 : //style mainScreen = new List( Frogger, )。 //style mainMenuItem ( ( ), null)。 //style mainMenuItem ( ( ), null)。 padding: 5。 /**獲得菜單項背景透明效果 **/ fontcolor: fontColor。 fontsize: small。 checkboxplain: none。 } 游戲屏幕處理 FroggerScreen 類是游戲的核心,它控制循環(huán)操作,包括青蛙的移動,圖像的繪制以及讀取和響應(yīng)用戶的輸入。 FroggerScreen 繼承了 GameCanvas 類。 getKeyStates()同時間偵測從上一次操作后的多個游戲按鍵的狀態(tài),使得按鍵不被“遺忘”,這樣保證了操作處理的實時性,甚至可以模擬游戲操作性極強的組合按鍵使用。設(shè)計 Frogger 類: public class FroggerScreen extends GameCanvas implements Runnable { public FroggerScreen( Frogger midlet ) { super( true )。 ()。 if (keyState != 0) { // 處理按鍵狀態(tài) } // 刷新屏幕 : flushGraphics()。 為了實 現(xiàn)這個,我們需要使用 游戲循環(huán)的東西:任何需要處理的任務(wù)都是游戲循環(huán)的一部分,通常把每秒種循環(huán)次數(shù)稱為 CPS(cycles per second)及幀率 , 也有的稱為 FPS(frames per second) 。在 Java 中通常有兩種方法可以實現(xiàn): 定時器 與線程。下面詳細進行一下介紹 : Timer 類是一個定時器,可以每隔一段固定的時間做一件事情,而且可以很方便的停止這些動作。需要停止時,可以調(diào)用 Timer 對象的 cancel 方法實現(xiàn),該方法可以停止該 Timer 啟動的所有任務(wù) (Task)。 TimerTask是一個抽象類,在實際使用過程中,一般是繼承 TimerTask類,然后實現(xiàn)實際的操作,停止 TimerTask 可以使用 TimerTask 對象里面的 cancel方法 。將幀速率控制程序段加入到 Frogger 類 中: //設(shè)置游戲每秒鐘最大循環(huán)次數(shù)為 30 private final static int MAX_FRAMES_PER_SECOND = 30。 //在主循環(huán)中控制游戲的幀速率 public void run() { long lastCycleTime = ()。 while (!) { //標記循環(huán)開始時間 cycleStartTime = ()。 if (keyState != 0) { //處理按鍵 } lastCycleTime = ()。 // 刷新屏幕 : flushGraphics()。 if (timeForFrame TIME_PER_FRAME ) { try { ( TIME_PER_FRAME timeForFrame )。 這樣每進入一關(guān)只需要讀取 相應(yīng)的初始化文件進行關(guān)卡初始化即可,如地圖的創(chuàng)建、玩家坐標等等 [6]。 18 圖 12 用二進制編輯器編輯 level1 的關(guān)卡數(shù)據(jù) 本游戲使用 J2ME Polish binaryeditor 進行編輯,將關(guān)卡地圖和其它只讀數(shù)據(jù)都采用這種靈活的方式存儲: 定義每關(guān)公有的初始化數(shù)據(jù),如重試次數(shù)、青蛙跳躍距離等 level[關(guān)卡序號 ].data 定義每關(guān)特有的初始化數(shù)據(jù), 如背景地圖數(shù)組、開始坐標等 圖 13 為 關(guān)卡一編輯的二維背景地圖數(shù)據(jù) 下面是 游戲中關(guān)卡初始化的一段代碼: private void loadNextLevel() { // 清空當前關(guān)卡數(shù)據(jù) int size = getSize()。 i size。 } ++。 DataInputStream in = null。 InputStream inputStream = getClass().getResourceAsStream( levelName )。 levelName = /。 } in = new DataInputStream( inputStream )。 int playerStartX = ()。 所有的這些過程其實就是一個循環(huán)的流圖 [7],如下: 20 圖 14 游戲循環(huán)流圖 4 優(yōu)化與多手機移植 由于手機低性能和手機間的巨大差異, J2ME 游戲的優(yōu)化和多手機移植是必不可少的步驟。而這樣的優(yōu)化必定帶來新的錯誤、降低可移植性,所以在完成編碼前不應(yīng)該引入優(yōu)化工作,優(yōu)化是一個階段性工作, 通常占據(jù)整個游戲開發(fā)的的 50%的時間, 開發(fā) 代碼 時只需維持代碼整潔易懂就好。利用 J2ME模擬器的事件探測和內(nèi)存監(jiān)視器進行分析 ,定位優(yōu)化代碼及耗用內(nèi)存大的對象進行修改,比較修改前后差別是否有助于提高性能。 ()可以監(jiān)視剩余內(nèi)存容量,便于手動釋放。 // object 不能為空 該寫法先創(chuàng)建了對象然后進行賦值操作,這樣存在兩個對象 都有可能 溢出 ,也不利于垃圾回收器的工作,正確的寫法應(yīng)該是: object=null 。 再如: drawString(“游戲時間: ”+time, 20, 20, |)。 在各種資 源使用 完應(yīng)該及時的清空以便獲得更多的空閑內(nèi)存,熟知的有關(guān)閉沒用 rms,釋放無用的網(wǎng)絡(luò)連接、流等,適當?shù)耐V咕€程等。應(yīng)該使用偏向于面向過程的設(shè)計方法。 資源優(yōu)化 運用存儲模式 在手機上編程,小容量內(nèi)存是最大的限制之 一,為節(jié)約內(nèi)存,使用了各種針對內(nèi)存受限制系統(tǒng)而設(shè)計的模式 [9]。 LZ 壓縮容易實現(xiàn),更重要的是解碼快,并且?guī)缀醪恍枰R時內(nèi)存。 ● 輔助存儲模式 (Secondary storage) 輔助存儲模式不僅廣泛應(yīng)用于構(gòu)建內(nèi)存受限制設(shè)備的存儲系統(tǒng),也同樣適合應(yīng)用程序結(jié)構(gòu)。 關(guān)卡類 R
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1