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

正文內(nèi)容

j2me手機游戲設計—計算機(論文)(參考版)

2024-12-11 01:06本頁面
  

【正文】 地圖如圖 所示,地圖編碼如圖 所示 初始 等待 運行 顯示結果 按下開始鍵 按下開始鍵 主角死亡 static int map[][] = new int[][] { { 1, 1, 1, 2, 2, 2, 1, 1 }, { 2, 3, 4, 2, 1, 2, 1, 2 }, { 1, 5, 6, 1, 2, 2, 1, 3 }, { 2, 2, 1, 7, 8, 2, 2, 5 }, { 1, 2, 1, 9, 10, 2, 2, 1 }, { 1, 1, 1, 2, 2, 1, 1, 1 }, { 7, 8, 2, 1, 2, 2, 2, 2 }, { 9, 10, 1, 2, 2, 1, 2, 2 } }。這里利用了一個計數(shù)器,當界面更新3 次后,海洋才更新一次。由于 這個游戲的背景是不和主角發(fā)生交互的,不需要經(jīng)常的變換或擴展, 在這里使用了硬編碼。地圖實際即為 TiledLayer 的一個對象。 在創(chuàng)建地圖時使用了 TiledLayer。 public void update()方法用于更新狀態(tài)。 GameWorld 類本身也是個狀態(tài)機,他的狀態(tài)圖如圖 所示。提示語是從 右向左運動的,當提示語最后一個字母運動到左邊視圖邊界的時候, 重置提示語的位置到視圖的右邊,來實現(xiàn)提示語連續(xù)的滾動顯示。 public void printPrompt(Graphics g, String str)方法用于顯示提示語句,首先在視圖中裁剪中間一部分區(qū)域,用于顯示游戲評語。它使用了 LayerManager 來管理 Layer。他的功能比較復雜,它有很多的域成員,為了方便通信,大多數(shù)有通信需求的成員都被設計成 Public 以便訪問。首先輪尋子彈數(shù)組 , 如果有子彈是運行的 ( 即是活著的 ) 在這里使用了 bullets[i][BULLET_LIFE] 是不是為 0來判斷子彈的狀態(tài),如果bullets[i][BULLET_LIFE] = 0,則說明子彈已經(jīng)死亡,如果bullets[i][BULLET_LIFE] != 0則說明子彈還是有生命的,這時, 調(diào)用isCollision(plane, i, range)方法再次判斷子彈是否和飛機相互碰撞,在沒有碰撞的情況下,認為飛機周圍有子彈,最后設置飛機周圍 range范圍內(nèi)的子彈死亡,即bullets[i][BULLET_LIFE] = 0來完成,再重新初始化子彈數(shù)組,完成爆炸效果。 initBullet(i)。 i 。當檢測到飛機和子彈碰撞,返回 Plane類中 public void update()函數(shù),更新屏幕,產(chǎn)生飛機爆炸效果。 } } return result。 int bulletYCenter = ()。 (bullets[i][BULLET_X], bullets[i][BULLET_Y])。 int planeXCenter = ()。盡管像素級別的檢測是一個完美精確的檢測方法,但其效率實在是太低了,所以,人們經(jīng)??偸莻魅?false進行非像素級別的檢測。非像素級別的檢測只要矩形檢測框發(fā)生重疊就算碰撞,而像素級別的檢測在矩形檢測框發(fā)生重疊的基礎上,僅當非透明像素發(fā)生重疊時,才發(fā)生碰撞。設定好矩形檢測框后就可以使用 以下三種方法進行和不同對象的碰撞檢測,碰撞檢測對象包括 Image,Sprite TiledLayer. Boolean collidesWith(Image image,int x,int y,boolean pixelLevel) Boolean collidesWith(Sprite s,boolean pixelLevel) Boolean collidesWith(TiledLayer t,boolean pixelLevel) pixelLevel代表檢測的模式。其中的 x,y是相對于自身坐標系的。一個設定矩形檢測的技巧是,將矩形檢測框設定為小于實際精靈的檢測面積。 本游戲正是使用了菱形檢測法,是一種特殊的矩形檢測,因此 誤差也稍微大了點,也是本游戲的一大缺憾。 飛機在前進時也需要考慮到是否碰撞到子彈,以免重疊運行,造成許多物理上不可能的情況,缺乏真實感。 public void updateBullet(int i) 方法是子彈在運行過程中撞墻以后的處理。 private void paintBullet(Graphics g, int i, int x, int y)方法用來處理子彈出界,通過改變子彈的坐標來實現(xiàn)更新子彈的位置。這樣防止子彈開始運行時候在視圖的外面, 看不到子彈的 BUG,這樣我們就確定了子彈的初始位置,最后隨機生成子彈在 X方向和 Y方向的初始速度,即子彈的速度。 首先 用 我們 bullets[i][BULLET_X] = 5設置子彈 i的 X方向的坐標為 5(這個位置在屏幕視圖的外面),然后 用bullets[i][BULLET_Y] = (() amp。 類中定義的方法 private void initBullet(int i)起到通過判斷子彈的初始運行方向來確定子彈的運行軌跡的方向 , 同時通過改變 bullets,第 i行的數(shù)值來完成子彈的運動效果,子彈是隨機從界面的四個方向涌出來的。BULLET_VY = 4。 BULLET_Y = 2。 . Bullets 類 Bullets類繼承自 Sprite類,以實現(xiàn)玩家子彈的相關功能。如圖 所示 圖 游戲開始界面 圖 游戲運行界面 點擊啟動按鈕,啟動游戲。本程序主類為GameMIDletHold。該類銷毀狀態(tài) 暫停狀態(tài) 活動狀態(tài) startApp() 默認構造器 pauseApp() destroyApp(boolean) destroyApp(boolean) 中擁有可以管理程序的創(chuàng)建、開始、暫停(手機中很可能有正在運行程序卻突然來電的情況,這時應進入暫停狀態(tài)。 . 游戲開始界面 每個 MIDlet 程序都必須有一個主類,該類必須繼承自 MIDlet。如果選擇啟動游戲,則調(diào)用 gameWorld 類,顯示游戲開始畫面。 程序為需要完成獨立功能的模塊設置了單獨的類。在屏幕重繪的主程序中,將在每次的循環(huán)中判斷若干事件,以便程序進入相關的分支執(zhí)行相關的反應代碼。在主程序運行的線程 中,游戲中所有的對象都應該運行在同一個線程下。在主程序運行的線程中,畫面刷新將以一定的頻率采用雙緩沖技術對屏幕重繪,實時反映整個游戲的進行狀態(tài)。 圖 MIDlet 的狀態(tài)轉(zhuǎn)換 本程序采用面向?qū)ο蟮脑O計模式,對游戲中的所有物體賦予對象的概念和屬性。在 destroyed 狀態(tài)的 MIDlet 必須釋放了所有的資源,并且保存了數(shù)據(jù)。在 active 狀態(tài)調(diào)用 destroyApp(boolean unconditional)或者 pauseApp()方法可以使得 MIDlet 進入 destroyed 或者 pause 狀態(tài)。這三種狀態(tài)的轉(zhuǎn)換關系如圖 所示: MIDlet 有三個狀態(tài),分別是 pause、 active 和 destroyed。而每個 MIDlet 都必須繼承 這個抽象類。 . 程序流程 MIDlet suite 是 MIDP 應用程序的最小單位, JAM 負責將手機內(nèi)的 MIDlet suite 以圖形化的方式呈現(xiàn),讓用戶能夠選取欲執(zhí)行的 MIDlet suite,一旦選取了某個 MIDlet suite,操作系統(tǒng)就會激活 KVM 執(zhí)行里面的 MIDlet。 第四章 程序 的設計與 實現(xiàn) 本章 將按游戲設計中的 Java 類來分別介紹。對游戲基本算法等做了詳細敘述。殺死附近一定范圍的敵人 ,保險減 1:保險為 0 后按下開火鍵無效。 游戲啟動后開始記時,當主角和敵人碰撞時發(fā)生爆炸,記時停止。 敵人是一群子彈,他們從界面的四個邊緣源源不斷的涌入界面,每個子彈都有自己的速度很 方向,它們沿著自己的直線軌跡做運動。 . 本文工作 游戲主角是一架飛機,用戶可以操縱它沿著上、下、左、右四個方向移動。由于以上介紹的減少變量、函數(shù)的命名長度的關系,編譯后也會從 .class 文件中減少這些冗余的信息?;煜鲗⒋a中的所有變量、函數(shù)、類的名稱變?yōu)楹喍痰挠⑽淖帜复枺绻?乏相應的函數(shù)名指示和程序注釋,即使被反編譯,也將難以閱讀。如果不加以施行有效的措施,將造成嚴重的后果。然而這樣會導致 .class 很容易被反編譯為源代碼,從而不能保護作者的知識成果。 . 關于混淆器 Java 語言并沒有完全編譯成二進制可執(zhí)行文件,編譯出的 .class 文件是一種介于源程序和二進制之間的一中基于半解釋的字節(jié)碼,需要虛擬機來執(zhí)行。由于 Java 語言中,不像許多其他的如 C++語言,不需要指定回收函數(shù)中特定不使用的資源,資源回收機制將自動清空無效變量占用的空間。內(nèi)存檢測器是內(nèi)存跟蹤測試隨時間變化的調(diào)試器。 . 內(nèi)存檢測器 Wireless Tool Kit 提供了許多在運行時監(jiān)視運行狀態(tài)的工具。 (5) 將 PNG 圖片合并成一張,減少圖形數(shù)據(jù)的大小。 (3) 只使用一個線程。在應用程序內(nèi),對于所建立的類、接口、方法及變量名而言,都需要賦予一個識別的名稱,所命名的名稱每多一個字符就會在類文件內(nèi)多產(chǎn)生一個字節(jié),對于一個較復雜的應用程序而言就會增加為數(shù)不小的數(shù)據(jù)量。在游戲開始后,子彈是隨機從界面的四個方向涌出來的。對于這些大量的具有相同行為的對象,采用了為群體建立類,由群體類保存整個群體的狀態(tài)信息,群體類持有單一的 Sprite,并將一系列針對群體中某一元素的操作抽象出來,形成對整個群體的操作。在 Game 包中的 TiledLayer 和 Sprite 類都整合 了這樣的功能。這些代碼包含在每一個單獨的 png 格式圖象中,然而如果將多個 png 圖象合并在一張幅面稍大一些的整圖中,多個 chunks 就可以得到精簡,圖片的大小可以得到控制。飛機之間或與白云碰撞時就不會因為背景有特定的顏色,顯示出的效果像貼上的圖片而缺乏真實感,物體之間輕微重疊時最上層圖片也不會覆蓋超過其有效象素外的部分。 . PNG 圖片格式 PNG(Portable Network Graphics)格式是 MIDlet 唯一支持的圖象格式, PNG具體格式由 PNG Specification,Version 定義的。一塊整圖可被分割成等大小的圖象格,每塊格有其對應的序號,按照行列遞增。該類使不需要高 分辨率的圖象就能創(chuàng)建大幅圖面成為可能。改變View Window 的位置可以制造出滾動屏幕的效果。層號總是連續(xù)的,即使有中間的層被移除,其他層的序號會作相應的調(diào)整以保持整體的完整性。 LayerManager 存儲了一個層的列表,新的層可以用函數(shù)附加、刪除和插入。 LayerManager 提供控制整體畫面層的控制。每個小圖按照其排列順序有相應的序號,在程序中調(diào)用其序號,就可以繪制出相應的圖片。圖片可翻轉(zhuǎn)、顛倒、由一個主角圖片就可以方便的得到所有方向的顯示狀態(tài),相比原先只能使用 Canvas 繪圖,需要將所有方向的主角圖象都繪制在 png 圖象中簡化了許多。 Sprite 類是繼 承自 Layer 的用于存儲多楨的基本可視元素。 GameCanvas 類提供了flushGraphics()的功能,實現(xiàn)了雙緩沖技術(參見 節(jié))。 GameCanvas 類繼承自 Canvas,所以具有 Canvas 所具有的功能,還額外增加了一些便于游戲設計的功能。 Game 類的出現(xiàn)不僅 降低了錯誤出現(xiàn)的幾率,也使游戲代碼變的更小,因為開發(fā)者不需要自己編寫象 Sprite 這種例子。 新加入了 GameCanvas、 Sprite、 Layer、 LayerManager、 TiledLayer 五個與游戲開發(fā)相關的類。 J2ME 的流行促進幾個運營商和制造商開發(fā)了一些支持游戲的類,但是,這卻造成了游戲缺乏可移植性的問題,例如,很難將使用 Siemens 的 Sprite 類的游戲移植到 Nokia 上。不過在某些MIDP 的實現(xiàn)上已經(jīng)加上了雙重緩沖的支持,因此在處理前應先利用 Canvas 類的 isDoubleBuffer()方法來判斷。 這樣的技術在繪制動畫時特別有用。需要在paint()方法內(nèi)將所想要畫的圖形畫在一張預先準備好的背景上,等所有繪圖操作都完成后再將背景的數(shù)據(jù)拷貝到實際的屏幕上。其對象會被 傳給 Canvas 的 paint()函數(shù),以便最終顯示。它具有 24 位深度色彩的繪制能力,以三原色分別各占一個字節(jié)表示其顏色。盡管大多數(shù)桌面電腦的顯卡都支持翻轉(zhuǎn)技術,但該技術在手持設備上可能得不到支持。翻轉(zhuǎn)通常要比雙緩沖快些,因為節(jié)約了內(nèi)存間復制的時 間。開發(fā)者依舊在后備界面上繪畫。 與雙緩沖技術對用的一種解決界面閃爍
點擊復制文檔內(nèi)容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1