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

正文內(nèi)容

j2me手機游戲設(shè)計—計算機(論文)(已改無錯字)

2023-01-19 01:06:33 本頁面
  

【正文】 為界面的上半部分尚未畫完,就要顯示整個畫面。用戶看到的畫面的上半部分是更新后的,而下半部分則是舊的,形成撕裂。撕裂除了和繪制界面的方式有關(guān)外,還和部分顯示設(shè)備有關(guān)。 形成這兩個問題的根源在于界面的直接操作,也稱直接寫屏。解決的本法是使用緩沖技術(shù)。緩沖的思想在生活中隨處可見:當(dāng)你想采購些東西又不太急用的時候,通常你會把物品的明澈功能記錄在一個清單上,等到周末一起從超市買回來。這其中就有緩沖的思想。同樣的,可以通過在一個后備界面上渲染來代替直接寫評。每當(dāng)渲染結(jié)束 時,就可一次性的把整個后備界面繪畫到顯示界面上。因為只進(jìn)行一次繪畫,所以自然就消除了閃爍和一部分撕裂現(xiàn)象。后備界面通常被稱為緩沖區(qū),是內(nèi)存或顯存中開辟的一塊和真實界面一樣大小的內(nèi)存區(qū)域。因為這個技術(shù)用到了兩個界面:顯示界面和緩沖界面,所以就叫做雙緩沖。 與雙緩沖技術(shù)對用的一種解決界面閃爍的技術(shù)叫做翻轉(zhuǎn)。實現(xiàn)翻轉(zhuǎn)也需要兩個界面。開發(fā)者依舊在后備界面上繪畫。不同的是,不再進(jìn)行后備界面到顯示界面的復(fù)制,而是直接將后備界面切換成當(dāng)前界面,而當(dāng)前界面自然就成了后備界面。翻轉(zhuǎn)通常要比雙緩沖快些,因為節(jié)約了內(nèi)存間復(fù)制的時 間。但是翻轉(zhuǎn)需要設(shè)備的支持。盡管大多數(shù)桌面電腦的顯卡都支持翻轉(zhuǎn)技術(shù),但該技術(shù)在手持設(shè)備上可能得不到支持。雙緩沖技術(shù)原理如圖 所示 [8] 圖 雙緩沖技術(shù)原理圖 . Graphics 類 Graphics 類提供了簡單的 2D 繪圖功能。它具有 24 位深度色彩的繪制能力,以三原色分別各占一個字節(jié)表示其顏色。程序只能在 paint()函數(shù)中使用 Graphics繪制, GameCanvas 可調(diào)用 getGraphics()函數(shù)直接繪制在緩沖區(qū)上,可以在任何時間請求傳輸?shù)角芭_。其對象會被 傳給 Canvas 的 paint()函數(shù),以便最終顯示。 . 繪制背景技術(shù) 在沒有 前,進(jìn)行游戲繪圖一般需要手動編程使用雙緩沖。需要在paint()方法內(nèi)將所想要畫的圖形畫在一張預(yù)先準(zhǔn)備好的背景上,等所有繪圖操作都完成后再將背景的數(shù)據(jù)拷貝到實際的屏幕上。 Image 類提供了一個建立背景的靜態(tài)方法 createImage(int width, int height),再利用 getGraphics()方法取得屬于這個背景的 Graphics 對象,所進(jìn)行的繪圖操作都會作用在背景上,等到全部的繪圖操作完成后,再調(diào)用 drawImage()方法將背景的數(shù)據(jù)復(fù)制到實際顯示的屏幕上。 這樣的技術(shù)在繪制動畫時特別有用。繪制動畫時經(jīng)常需要不斷地更新畫面,而更新畫面的操作就是先將屏幕以 fillRect()的方式清除,再將下一張圖片畫在屏幕上,然而反復(fù)的清除及重繪會造成屏幕的閃爍現(xiàn)象( flicker),因此使用雙重緩沖的好處就是在背景進(jìn)行這個清除及重繪的操作,再將完成的繪圖拷貝到屏幕上,由于用戶看不到清除的操作,因此就不會出現(xiàn)閃爍的現(xiàn)象了。不過在某些MIDP 的實現(xiàn)上已經(jīng)加上了雙重緩沖的支持,因此在處理前應(yīng)先利用 Canvas 類的 isDoubleBuffer()方法來判斷。 隨著手機的普及,手機游戲開發(fā)的發(fā)展需要。 J2ME 的流行促進(jìn)幾個運營商和制造商開發(fā)了一些支持游戲的類,但是,這卻造成了游戲缺乏可移植性的問題,例如,很難將使用 Siemens 的 Sprite 類的游戲移植到 Nokia 上。 在 版本發(fā)布后,這些游戲移植性問題初步得到了解決。 新加入了 GameCanvas、 Sprite、 Layer、 LayerManager、 TiledLayer 五個與游戲開發(fā)相關(guān)的類。其中 Layer 類一般不會直接用到。 Game 類的出現(xiàn)不僅 降低了錯誤出現(xiàn)的幾率,也使游戲代碼變的更小,因為開發(fā)者不需要自己編寫象 Sprite 這種例子。下面將簡要介紹 Game 類。 GameCanvas 類繼承自 Canvas,所以具有 Canvas 所具有的功能,還額外增加了一些便于游戲設(shè)計的功能。比如: GameCanvas 類直接提供了 getKeyStates(),使程序員可以在同一個線程自己偵測按鍵的狀態(tài)。 GameCanvas 類提供了flushGraphics()的功能,實現(xiàn)了雙緩沖技術(shù)(參見 節(jié))。 所謂的 Sprite,就是畫面上獨立移動的圖形。 Sprite 類是繼 承自 Layer 的用于存儲多楨的基本可視元素。不同的 frame 可交相顯示,構(gòu)成動態(tài)的效果。圖片可翻轉(zhuǎn)、顛倒、由一個主角圖片就可以方便的得到所有方向的顯示狀態(tài),相比原先只能使用 Canvas 繪圖,需要將所有方向的主角圖象都繪制在 png 圖象中簡化了許多。 Sprite 也可以從整合的圖象中讀圖,讀圖時將把大圖分解為若干等寬等高的小圖。每個小圖按照其排列順序有相應(yīng)的序號,在程序中調(diào)用其序號,就可以繪制出相應(yīng)的圖片。本程序中的飛機都由 Sprite 繼承得到。 LayerManager 提供控制整體畫面層的控制。它包括了一系列自 動獲取了代號和位置的層,簡化了各層加入游戲畫面的過程,提供了自動排序和繪制的能力。 LayerManager 存儲了一個層的列表,新的層可以用函數(shù)附加、刪除和插入。層的序號相當(dāng)于坐標(biāo)的 Z 軸, 0 層表示最接近用戶視覺,層數(shù)越高,離用戶越遠(yuǎn)。層號總是連續(xù)的,即使有中間的層被移除,其他層的序號會作相應(yīng)的調(diào)整以保持整體的完整性。 LM 中的 View Window 控制著與 LM 相對坐標(biāo)的可視區(qū)域。改變View Window 的位置可以制造出滾動屏幕的效果。 TiledLayer 是有一組圖象格元素組成的整塊虛擬圖象。該類使不需要高 分辨率的圖象就能創(chuàng)建大幅圖面成為可能。這項技術(shù)通常應(yīng)用在 2D 游戲平臺的滾動背景的繪圖。一塊整圖可被分割成等大小的圖象格,每塊格有其對應(yīng)的序號,按照行列遞增。多塊小格可由大塊同時替換組合而模擬動態(tài)的背景,這不需要逐塊替換所有的靜態(tài)圖象格而顯得非常方便。 . PNG 圖片格式 PNG(Portable Network Graphics)格式是 MIDlet 唯一支持的圖象格式, PNG具體格式由 PNG Specification,Version 定義的。 PNG 格式提供透明背景的圖象,這對繪制游戲畫面和被操縱主角極有幫 助。飛機之間或與白云碰撞時就不會因為背景有特定的顏色,顯示出的效果像貼上的圖片而缺乏真實感,物體之間輕微重疊時最上層圖片也不會覆蓋超過其有效象素外的部分。 PNG 格式圖片中包含許多定義其圖片特性的冗余部分 (Chunks)。這些代碼包含在每一個單獨的 png 格式圖象中,然而如果將多個 png 圖象合并在一張幅面稍大一些的整圖中,多個 chunks 就可以得到精簡,圖片的大小可以得到控制。使用 Image 類中的 createImage 函數(shù)可從整圖中分割出所需要的元素。在 Game 包中的 TiledLayer 和 Sprite 類都整合 了這樣的功能。 . 子彈的運行和控制 在游戲中,子彈數(shù)量很多而且充斥者整個界面,不可能每增加一個子彈都使用一個新的 Sprite。對于這些大量的具有相同行為的對象,采用了為群體建立類,由群體類保存整個群體的狀態(tài)信息,群體類持有單一的 Sprite,并將一系列針對群體中某一元素的操作抽象出來,形成對整個群體的操作。因此,我們使用了一個二維數(shù)組(數(shù)組的數(shù)組)來記錄子彈群的狀態(tài),每行代表一個元素,每列代表一個屬性。在游戲開始后,子彈是隨機從界面的四個方向涌出來的。 . 內(nèi)存的優(yōu)化 手機內(nèi)存空間小,所以在程序設(shè)計時應(yīng)該注意以 下幾點,以盡量減少內(nèi)存的使用: (1) 盡量縮短命名的長度。在應(yīng)用程序內(nèi),對于所建立的類、接口、方法及變量名而言,都需要賦予一個識別的名稱,所命名的名稱每多一個字符就會在類文件內(nèi)多產(chǎn)生一個字節(jié),對于一個較復(fù)雜的應(yīng)用程序而言就會增加為數(shù)不小的數(shù)據(jù)量。所有這些可以借助混淆器來幫助實現(xiàn) (2) 所有代碼寫為一個類。 (3) 只使用一個線程。 (4) 盡量不使用靜態(tài)變量。 (5) 將 PNG 圖片合并成一張,減少圖形數(shù)據(jù)的大小。 將 PNG 格式的小分辨率圖象合并在一張大的高分辨率圖象中,由于減少了頭文件的大小,將比合并前 的總大小減少許多。 . 內(nèi)存檢測器 Wireless Tool Kit 提供了許多在運行時監(jiān)視運行狀態(tài)的工具。 包括內(nèi)存狀況的檢測(手機上的內(nèi)存空間十分有限,必須時刻關(guān)注機載內(nèi)存是否大于程序所能使用到的最大可能的內(nèi)存空間),網(wǎng)絡(luò)狀況的檢測,運行函數(shù)的跟蹤等。內(nèi)存檢測器是內(nèi)存跟蹤測試隨時間變化的調(diào)試器。其中,允許強制垃圾回收 (Garbage Collection)。由于 Java 語言中,不像許多其他的如 C++語言,不需要指定回收函數(shù)中特定不使用的資源,資源回收機制將自動清空無效變量占用的空間。在程序運行中也可以調(diào)用 System 類的 gc()函數(shù)手動收回廢棄的內(nèi)存。 . 關(guān)于混淆器 Java 語言并沒有完全編譯成二進(jìn)制可執(zhí)行文件,編譯出的 .class 文件是一種介于源程序和二進(jìn)制之間的一中基于半解釋的字節(jié)碼,需要虛擬機來執(zhí)行。它包括了所有的信息。然而這樣會導(dǎo)致 .class 很容易被反編譯為源代碼,從而不能保護(hù)作者的知識成果。目前流行的如 decode,JAD 等反編譯工具可以以很快的速度生成源文件。如果不加以施行有效的措施,將造成嚴(yán)重的后果。 由此引入混淆器的概念?;煜鲗⒋a中的所有變量、函數(shù)、類的名稱變?yōu)楹喍痰挠⑽淖帜复?,如果?乏相應(yīng)的函數(shù)名指示和程序注釋,即使被反編譯,也將難以閱讀。 混淆器的作用不僅僅是保護(hù)代碼,它也有精簡編譯后程序大小的作用。由于以上介紹的減少變量、函數(shù)的命名長度的關(guān)系,編譯后也會從 .class 文件中減少這些冗余的信息?;煜螅w積大約能減少 25%,這對當(dāng)前費用較貴的無線網(wǎng)絡(luò)傳輸是有一定意義的。 . 本文工作 游戲主角是一架飛機,用戶可以操縱它沿著上、下、左、右四個方向移動。如有可能,可以增加支持左上、左下、右上、右下四個候補方向。 敵人是一群子彈,他們從界面的四個邊緣源源不斷的涌入界面,每個子彈都有自己的速度很 方向,它們沿著自己的直線軌跡做運動。碰到界面的四周后消失。 游戲啟動后開始記時,當(dāng)主角和敵人碰撞時發(fā)生爆炸,記時停止。 主角攜帶有 3 個保險,按下開火按鍵啟動保險。殺死附近一定范圍的敵人 ,保險減 1:保險為 0 后按下開火鍵無效。 . 小結(jié) 本章 介紹了程序的流程、相關(guān)技術(shù) 和 思想及其在本程序中的應(yīng)用。對游戲基本算法等做了詳細(xì)敘述。具體算法的代碼實現(xiàn)和詳細(xì)流程將在下章介紹。 第四章 程序 的設(shè)計與 實現(xiàn) 本章 將按游戲設(shè)計中的 Java 類來分別介紹。本游戲程序設(shè)計中,主要有Bullets 類 、 GameWorld 類、 Plane 類、 Clock 時鐘類、 InputAction 和 InputManager類、 ImageFont 和 ImageUtilities 類。 . 程序流程 MIDlet suite 是 MIDP 應(yīng)用程序的最小單位, JAM 負(fù)責(zé)將手機內(nèi)的 MIDlet suite 以圖形化的方式呈現(xiàn),讓用戶能夠選取欲執(zhí)行的 MIDlet suite,一旦選取了某個 MIDlet suite,操作系統(tǒng)就會激活 KVM 執(zhí)行里面的 MIDlet。 MIDlet 及相關(guān)的支持類組成了 MIDP 應(yīng)用程序的實際內(nèi)容。而每個 MIDlet 都必須繼承 這個抽象類。在 MIDP 規(guī)范中定義了 MIDlet 的生命周期,以及可以存在的三種狀態(tài),包括 Paused、 Active 以及 Destroyed,每一個 MIDlet 在任何時刻只可能處于其中的一個狀態(tài)。這三種狀態(tài)的轉(zhuǎn)換關(guān)系如圖 所示: MIDlet 有三個狀態(tài),分別是 pause、 active 和 destroyed。在啟動一個 MIDlet的時候,應(yīng)用管理軟件會首先創(chuàng)建一個 MIDlet 實例并使得他處于 pause 狀態(tài),當(dāng) startApp()方法被調(diào)用的時候 MIDlet 進(jìn)入 active 狀態(tài),也就是 所說的運行狀態(tài)。在 active 狀態(tài)調(diào)用 destroyApp(boolean unconditional)或者 pauseApp()方法可以使得 MIDlet 進(jìn)入 destroyed 或者 pause 狀態(tài)。值得一提的是 destroyApp(boolean unconditional)方法,事實上,當(dāng) destroyApp()方法被調(diào)用的時候, AMS 通知 MIDlet進(jìn)入 destroyed 狀態(tài)。在 destroyed 狀態(tài)的 MIDlet 必須釋放了所有的資源,并且保存了數(shù)據(jù)。如果 unconditional 為 false 的時候, MIDlet 可以在接到通知后拋出MIDletStateChangeException 而保持在當(dāng)前狀態(tài),如果設(shè)置為 true 的話,則必須立即進(jìn)入 destroyed 狀態(tài)。 圖 MIDlet 的狀態(tài)轉(zhuǎn)換 本程序采用面向?qū)ο蟮脑O(shè)計模式,對游戲中的所有物體賦予對象的概念和屬性。在開始游戲后將先從外部文件載入背景文件,對背景的所有物體進(jìn)行繪圖。在主程序運行的線程中,畫面刷新將以一定的頻率采用雙緩沖技術(shù)對屏幕重繪,實時反映整個游戲的進(jìn)行狀態(tài)。 游戲開始后先繪制地圖 ,并將各個對象實例化。在主程序運行的線程 中,游戲中所有的對象都應(yīng)該運行在同一個線程下。當(dāng)子彈碰墻時, 通過設(shè)置bullets[i][BULLET_X]*
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1