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

正文內(nèi)容

基于eclipse平臺(tái)的飛機(jī)游戲的開發(fā)畢業(yè)論文設(shè)計(jì)(編輯修改稿)

2024-08-15 21:54 本頁面
 

【文章內(nèi)容簡介】 后臺(tái)是 Java Application Manager。它所使用的傳輸媒體可以是紅外線、網(wǎng)絡(luò)、以及其他可用來傳輸?shù)拿襟w。 Java Application Manager 會(huì)從網(wǎng)絡(luò)上下載代表該 Application Suite 的 JAR 檔,接著在手機(jī)上安裝此 MIDlet Suite,然后在手機(jī)開始執(zhí)行該應(yīng)用程序。 本章小結(jié) 第二章介紹了 Java 語言的特點(diǎn)、本 程序的開發(fā)環(huán)境及其相關(guān)工具的原理和使用。 5 3 程序結(jié)構(gòu)、思想和相關(guān)技術(shù) 本程序需要解決的主要技術(shù)問題 游戲程序是一項(xiàng)精度要求很高的程序系統(tǒng),因?yàn)槠浯a利用率很高。一個(gè)實(shí)時(shí)運(yùn)行的最終作品,每秒都會(huì)運(yùn)行成千上萬行程序,繪圖事件、鍵盤事件都會(huì)以極高的頻率在后臺(tái)等待響應(yīng),若有絲毫的差別都將很容易導(dǎo)致程序在運(yùn)行不久后可能出現(xiàn)嚴(yán)重錯(cuò)誤,甚至死循環(huán)。因此,其邏輯設(shè)計(jì)應(yīng)當(dāng)相當(dāng)嚴(yán)謹(jǐn),需將所有可能發(fā)生的事件及意外情況考慮在設(shè)計(jì)中。 游戲中為了美觀,適用性強(qiáng),可能需要采用外部文件引入的圖片貼圖,有關(guān)貼圖,在 中提供了用于增強(qiáng)游戲功能的 game 包,使得解決靜態(tài)或動(dòng)態(tài)、畫面背景、屏幕刷新的雙緩沖等都有較好的解決方案。 玩家飛機(jī)的運(yùn)行可以通過鍵盤響應(yīng)事件控制,但敵方則因?yàn)槭亲詣?dòng)運(yùn)行,就需要有一定的智能性;敵人飛機(jī)的運(yùn)行算法也要進(jìn)行相關(guān)的設(shè)置,已免游戲過于簡單。 對(duì)于雙方發(fā)射的子彈應(yīng)該賦予不同的速度,同時(shí),程序應(yīng)該設(shè)定敵人飛機(jī)的子彈不與敵人的飛機(jī)進(jìn)行碰撞檢測,已增加游戲的可玩性。 雙方的飛機(jī)在前 進(jìn)時(shí)也需要考慮到是否碰撞到對(duì)方飛機(jī),以免重疊運(yùn)行,造成許多物理上不可能的情況,缺乏真實(shí)感。每一次刷新頁面、每前進(jìn)一步都需要進(jìn)行相關(guān)的碰撞檢測。 為了增加界面的美觀,在程序中添加了白云。由于手機(jī)屏幕大小有限,所以白云的數(shù)量和出現(xiàn)的位置要經(jīng)過相關(guān)的設(shè)置,才能實(shí)現(xiàn)白云不規(guī)則出現(xiàn)的效果。 游戲的地圖不可能通過繪圖來解決。否則,不僅難于控制和處理過多的元素,也會(huì)因過多的大型圖片而不能限制程序的大小,失去手機(jī)上程序的原則和 Java 的優(yōu)勢。 Java 是基于虛擬機(jī)的半解釋型編譯系統(tǒng),其執(zhí) 行效率較 C++等完全編譯后的程序會(huì)低很多,程序如果不進(jìn)行精簡和優(yōu)化,將可能導(dǎo)致運(yùn)行的不流暢。除開發(fā)過程中對(duì)結(jié)構(gòu)上的控制、變量的使用、算法的優(yōu)化等優(yōu)化外,還可以使用混淆器 (Obfuscator)進(jìn)行程序打包后的優(yōu)化。 游戲的結(jié)束、開始、動(dòng)態(tài)信息畫面作為構(gòu)成一個(gè)程序都是必不可少的重要部分。良好的用戶界面更是吸引用戶的硬指標(biāo),相關(guān)的美術(shù)構(gòu)圖和人性化設(shè)置也需要有一定的考慮。 以上相關(guān)技術(shù)細(xì)節(jié)和整體流程將分別在以下小節(jié)闡述。 程序流程 MIDlet suite 是 MIDP 應(yīng)用程序的最小單位, JAM 負(fù)責(zé)將手機(jī)內(nèi)的 MIDlet suite 以圖形化的方式呈現(xiàn),讓用戶能夠選取欲執(zhí)行的 MIDlet suite,一旦選取了某個(gè) MIDlet suite,操作系統(tǒng)就會(huì)激活 KVM 執(zhí)行里面的 MIDlet。 MIDlet 及相關(guān)的支持類組成了 MIDP 應(yīng)用程序的實(shí)際內(nèi)容。而 每個(gè) MIDlet都必須繼承 。在 MIDP規(guī)范中定義了 MIDlet的生命周期,以及可以存在的三種狀態(tài),包括 Paused、 Active 以及 Destroyed,每一個(gè)MIDlet 在任何時(shí)刻只 可能處于其中的一個(gè)狀態(tài)。這三種狀態(tài)的轉(zhuǎn)換關(guān)系如圖 31 所示:MIDlet 有三個(gè)狀態(tài),分別是 pause、 active和 destroyed。在啟動(dòng)一個(gè) MIDlet 的時(shí) 候,應(yīng)用管理軟件會(huì)首先創(chuàng)建一個(gè) MIDlet實(shí)例并使得他處于 pause 狀態(tài),當(dāng) startApp()方法被調(diào)用的時(shí)候 MIDlet 進(jìn)入 active 狀態(tài),也就是所說的運(yùn)行狀態(tài)。在 active 狀態(tài)調(diào)用destroyApp(boolean unconditional) 或者pauseApp() 方 法可以 使得 MIDlet 進(jìn)入消減狀態(tài) (Destroyed) 停止?fàn)顟B(tài) (Paused) 運(yùn)行狀態(tài) (Active) StartApp() DestroyApp() 呼叫 MIDlet 的構(gòu)造函數(shù) DestroyApp() PauseApp() 圖 31 MIDlet 的流程 6 destroyed 或者 pause 狀態(tài)。值 得一提的是 destroyApp(boolean unconditional)方法,事實(shí)上,當(dāng) destroyApp()方法被調(diào)用的時(shí)候, AMS 通知 MIDlet 進(jìn)入 destroyed 狀態(tài)。在 destroyed 狀態(tài)的 MIDlet 必須釋放了所有的資源,并且保存了數(shù)據(jù)。如果 unconditional 為 false 的時(shí)候, MIDlet 可以在接到通知后拋出MIDletStateChangeException 而保持在當(dāng)前狀態(tài),如果設(shè)置為 true 的話,則必須立即進(jìn)入 destroyed 狀態(tài)。 本程序采用面向?qū)ο蟮脑O(shè)計(jì)模式,對(duì)游戲 中的所有物體賦予對(duì)象的概念和屬性。運(yùn)行程序后允許用戶選擇執(zhí)行選項(xiàng)菜單,在開始游戲后將先從外部文件載入地圖文件,對(duì)背景的所有物體進(jìn)行繪圖。在主程序運(yùn)行的線程中,畫面刷新將以一定的頻率采用雙緩沖技術(shù)對(duì)屏幕重繪,實(shí)時(shí)反映整個(gè)游戲的進(jìn)行狀態(tài)。 游戲開始后先繪制地圖,并將各個(gè)對(duì)象實(shí)例化。游戲中所有的對(duì)象都應(yīng)該運(yùn)行在同一個(gè)線程下。當(dāng)敵人或者用戶的子彈達(dá)到射程范圍后,并不刪除子彈對(duì)象,而是使用 setVisable(false)使其不能顯示,當(dāng)用戶或敵人在次發(fā)射子彈時(shí),只需使用 setVisable(true)設(shè)置成可以顯示 即可。在屏幕重繪的主程序中,將在每次的循環(huán)中判斷若干事件,以便程序進(jìn)入相關(guān)的分支執(zhí)行相關(guān)的反應(yīng)代碼。如:玩家剩余飛機(jī)數(shù)是為 0、敵人、玩家飛機(jī)是否被擊中、屏幕上相關(guān)信息的繪制等。 程序?yàn)樾枰瓿瑟?dú)立功能的模塊設(shè)置了單獨(dú)的類。 lzhhdm 類繼承自 Midlet, gameScreen 類、MenuScreen 類繼承自 GameCanvas, mybullets 繼承自 Sprite 類。載入程序后首先啟動(dòng)的是程序介紹的信息畫面。點(diǎn)擊 ok 后調(diào)用 MenuScreen 類實(shí)現(xiàn)菜單。如果選擇進(jìn)入游戲,則調(diào)用 gameScreen 類,并且中止 MenuScreen 類中的線程運(yùn)行,已提高運(yùn)行速度。 Mybullets 類為玩家子彈類。 Canvas 類 為了能有程序開發(fā)人員控制接口的外觀和行為,需要使用大量的初級(jí)用戶接口類,尤其在游戲程序中,幾乎完全依賴的就是 Canvas 抽象類進(jìn)行繪圖。從程序開發(fā)的觀點(diǎn)看, Canvas 類可與高級(jí) Screen 類交互,程序可在需要時(shí)在 Canvas 中摻入高級(jí)類的組件。 Canvas 提供了鍵盤事件、指點(diǎn)桿事件(如果設(shè)備支持),并定義了允許將鍵盤按鍵映射為游戲控制鍵的函數(shù)。鍵盤事件由鍵代碼指定,但這樣控制游戲會(huì)導(dǎo)致缺乏通 用性,并不是每個(gè)設(shè)備的鍵盤布局都適合游戲的操作。應(yīng)當(dāng)將鍵代碼轉(zhuǎn)換為游戲鍵的代碼,以便硬件開發(fā)商能定義他們自己的游戲鍵布局。 Graphics 類 Graphics 類提供了簡單的 2D 繪圖功能。它具有 24 位深度色彩的繪制能力,以三原色分別各占一個(gè)字節(jié)表示其顏色。程序只能在 paint()函數(shù)中使用 Graphics 繪制, GameCanvas 可調(diào)用 getGraphics()函數(shù)直接繪制在緩沖區(qū)上,可以在任何時(shí)間請(qǐng)求傳輸?shù)角芭_(tái)。其對(duì)象會(huì)被傳給 Canvas 的 paint()函數(shù),以便最終顯示。 技術(shù)下的繪制背景技術(shù) 在沒有 前,進(jìn)行游戲繪圖一般需要手動(dòng)編程使用雙緩沖。需要在 paint()方法內(nèi)將所想要畫的圖形畫在一張預(yù)先準(zhǔn)備好的背景上,等所有繪圖操作都完成后再將背景的數(shù)據(jù)拷貝到實(shí)際的屏幕上。 Image 類提供了一個(gè)建立背景的靜態(tài)方法 createImage(int width, int height),再利用 getGraphics()方法取得屬于這個(gè)背景的 Graphics 對(duì)象,所進(jìn)行的繪圖操作都會(huì)作用在背景上,等到全部的繪圖操作完成后,再調(diào)用 drawImage()方法將背景的數(shù)據(jù)復(fù)制到實(shí)際 顯示的屏幕上。 這樣的技術(shù)在繪制動(dòng)畫時(shí)特別有用。繪制動(dòng)畫時(shí)經(jīng)常需要不斷地更新畫面,而更新畫面的操作就是先將屏幕以 fillRect()的方式清除,再將下一張圖片畫在屏幕上,然而反復(fù)的清除及重繪會(huì)造成屏幕的閃爍現(xiàn)象( flicker) ,因此使用雙重緩沖的好處就是在背景進(jìn)行這個(gè)清除及重繪的操作,再將完成的繪圖拷貝到屏幕上,由于用戶看不到清除的操作,因此就不會(huì)出現(xiàn)閃爍的現(xiàn)象了。不過在某些 MIDP 的實(shí)現(xiàn)上已經(jīng)加上了雙重緩沖的支持,因此在處理前應(yīng)先利用 Canvas 類的 isDoubleBuffer()方法來判斷。 新增的 GameCanvas 包 7 J2ME 的流行促進(jìn)幾個(gè)運(yùn)營商和制造商開發(fā)了一些支持游戲的類,但是,這卻造成了游戲缺乏可移植性的問題,例如,很難將使用 Siemens 的 Sprite 類的游戲移植到 Nokia 上。 在 版本發(fā)布后,這些游戲移植性問題初步得到了解決。 新加入了 GameCanvas、 Sprite、 Layer、 LayerManager、 TiledLayer 五個(gè)與游戲開發(fā)相關(guān)的類。其中 Layer 類一般不會(huì)直接用到。 Game 類的出現(xiàn)不僅降低了錯(cuò) 誤出現(xiàn)的幾率,也使游戲代碼變的更小,因?yàn)殚_發(fā)者不需要自己編寫象 Sprite 這種例子。下面將簡要介紹 Game 類。 GameCanvas 類繼承自 Canvas,所以具有 Canvas 所具有的功能,還額外增加了一些便于游戲設(shè)計(jì)的功能。比如: GameCanvas 類直接提供了 getKeyStates(),使程序員可以在同一個(gè)線程自己偵測按鍵的狀態(tài)。 GameCanvas 類提供了 flushGraphics()的功能,實(shí)現(xiàn)了雙緩沖技術(shù)。 所謂的 Sprite,就是畫面上獨(dú)立移動(dòng)的圖形。 Sprite 類是繼承自 Layer 的用于存儲(chǔ)多楨的基本可視元素。不同的 frame 可交相顯示,構(gòu)成動(dòng)態(tài)的效果。圖片可翻轉(zhuǎn)、顛倒、由一個(gè)主角圖片就可以方便的得到所有方向的顯示狀態(tài),相比原先只能使用Canvas 繪圖,需要將所有方向的主角圖象都繪制在 png 圖象中簡化了許多。 Sprite 也可以從整合的圖象中讀圖,讀圖時(shí)將把大圖分解為若干等寬等高的小圖。每個(gè)小圖按照其排列順序有相應(yīng)的序號(hào),在程序中調(diào)用其序號(hào),就可以繪制出相應(yīng)的圖片。本程序中的雙方飛機(jī)、子彈、白云都由 Sprite 繼承得到。 LayerManager 提供控制整體畫面層的控制。它包括 了一系列自動(dòng)獲取了代號(hào)和位置的層,簡化了各層加入游戲畫面的過程,提供了自動(dòng)排序和繪制的能力。 LayerManager 存儲(chǔ)了一個(gè)層的列表,新的層可以用函數(shù)附加、刪除和插入。層的序號(hào)相當(dāng)于坐標(biāo)的 Z 軸, 0 層表示最接近用戶視覺,層數(shù)越高,離用戶越遠(yuǎn)。層號(hào)總是連續(xù)的,即使有中間的層被移除,其他層的序號(hào)會(huì)作相應(yīng)的調(diào)整以保持整體的完整性。 LM 中的 View Window 控制著與 LM 相對(duì)坐標(biāo)的可視區(qū)域。改變 View Window 的位置可以制造出滾動(dòng)屏幕的效果。 TiledLayer 是有一組圖象格元素組成的整塊虛擬圖象。該類 使不需要高分辨率的圖象就能創(chuàng)建大幅圖面成為可能。這項(xiàng)技術(shù)通常應(yīng)用在 2D 游戲平臺(tái)的滾動(dòng)背景的繪圖。一塊整圖可被分割成等大小的圖象格,每塊格有其對(duì)應(yīng)的序號(hào),按照行列遞增。多塊小格可由大塊同時(shí)替換組合而模擬動(dòng)態(tài)的背景,這不需要逐塊替換所有的靜態(tài)圖象格而顯得非常方便。 PNG 圖片格式 PNG(Portable Network Graphics)格式是 MIDlet 唯一支持的圖象格式, PNG 具體格式由 PNG Specification,Version 定義的。 PNG 格式提供透明背景的圖象,這對(duì)繪制游戲畫面 和被操縱主角極有幫助。飛機(jī)之間或與白云碰撞時(shí)就不會(huì)因?yàn)楸尘坝刑囟ǖ念伾?,顯示出的效果像貼上的圖片而缺乏真實(shí)感,物體之間輕微重疊時(shí)最上層圖片也不會(huì)覆蓋超過其有效象素外的部分。 PNG 格式圖片中包含許多定義其圖片特性的冗余部分 (Chunks)。這些代碼包含在每一個(gè)單獨(dú)的 png格式圖象中,然而如果將多個(gè) png 圖象合并在一張幅面稍大一些的整圖中,多個(gè) chunks 就可以得到精簡,圖片的大小可以得到控制。使用 Image 類中的 createImage 函數(shù)可從整圖中分割出所需要的元素。在 Game 包中的 TiledLayer 和 Sprite 類都整合了這樣的功能。本程序中的地圖元素都集成在一張 圖片中,實(shí)現(xiàn)了方便的管理和程序體積的精簡。 玩家飛機(jī)的控制方式和敵人方的智能運(yùn)行 GameCanvas 提供 getKeyStates 函數(shù)可獲取當(dāng)前鍵盤上的信息。將以位的形式返回鍵盤上所有鍵的按與釋放的狀態(tài),當(dāng) bit 為 1 時(shí),按鍵就是被按下的狀態(tài),為 0 時(shí)則為釋放狀態(tài)。只需要此一個(gè)函數(shù)的返回值就可以返回所有鍵的狀態(tài)。這保證了快速的按鍵和釋放也會(huì)被循環(huán)所捕捉。同時(shí),這樣的機(jī)制也可檢測到幾個(gè)鍵同時(shí)按下的狀態(tài),從而提供斜向 運(yùn)行等相應(yīng)功能 (本程序沒有實(shí)現(xiàn)斜上運(yùn)行功能 )。 程序運(yùn)行時(shí)應(yīng)該對(duì)玩家飛機(jī)是否飛出屏幕的
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1