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

正文內(nèi)容

基于java的手機游戲開發(fā)技術(shù)研究-資料下載頁

2025-11-22 23:26本頁面

【導(dǎo)讀】在進幾年時間里極為流行。而J2ME又是手機游戲開發(fā)平臺中運用最為廣泛的一種。速發(fā)展而誕生的一項新的開發(fā)技術(shù)。它定位在消費性電子產(chǎn)品的應(yīng)用上,對設(shè)備的智能。特性而提高開發(fā)的效率。本文先介紹了JAVA語言的歷史,以及JAVA語言的現(xiàn)狀。然后討論了一個基本的游戲。開發(fā)平臺的搭建,最后再以一個實際游戲的開發(fā)探討了現(xiàn)在最為流行的游戲開發(fā)框架,和游戲制作后期的優(yōu)化、調(diào)試。

  

【正文】 ) 圓的半徑。我的做法是,讓一個對象的圓心去碰撞另一個對象的圓,因為子彈的圖片太小,已經(jīng)沒有辦法再構(gòu)成個圓 形來進行碰濰 坊 學(xué) 院 本 科 畢 業(yè) 設(shè) 計 23 撞了。由于上邊總結(jié)出的 7種碰撞情況中,有 5種都需要做圓形檢測,這讓代碼顯的不易讀,冗余度增大。為了實現(xiàn)代碼的復(fù)用性,我把做圓形的部分檢測抽象出來另寫個方法,把需要的對象屬性作參數(shù)傳遞。這個方法的參數(shù)比較多,在上邊分析類結(jié)構(gòu)的時候已經(jīng)把參數(shù)列出來了,并進行了注釋。 圓形檢測的算法:用兩個對象的中心點坐標(biāo)連接 成 一條線段,然后以此線段為斜邊構(gòu)建一個 直角三角形。直角三角形的兩條直角邊的長度可以用坐標(biāo)相減的方法求得,然后用勾股定理求得 斜邊的平方,注意!一定不要將其開方,因為 CPU做浮點數(shù)運算比做整數(shù)運算要耗 費更多的時間。最好的做法是:我們將圓的半徑做平方運算以后再和剛才求出來的直角三角形斜邊的平方做比較。如果斜邊長大于半徑,說明沒有碰撞到,否則對象發(fā)生碰撞。 在做碰撞的時候需要做預(yù)處理,如果不做預(yù)處理可能會出現(xiàn)這一幀子彈沒接觸到飛機,但下一幀子彈卻飛到飛機身后去的情況。所以在判斷碰撞的時候需要加上對應(yīng)坐標(biāo)軸上的位移量,對下一幀進行預(yù)先判斷。 6. 繪制積分 由于字符串在程序運行中會占用海量存儲器,所以在手機上重復(fù)繪制一段文字或數(shù)字的時候我們都是以圖片的方式繪制到屏幕上。游戲中的分?jǐn)?shù)是個最典型的例子。先要準(zhǔn)備 一張 09的數(shù)字圖片,每一個數(shù)字寬度一樣,間隔一樣。見圖 。 圖 數(shù)字圖片 然后需要求出分?jǐn)?shù)(例如 :積分 point)有多少位,每一位上是數(shù)字幾。然后逐位的把數(shù)字畫到屏幕上去。 求出 point有多少位的算法:讓 point對 10的 N次方整除 (N通過循環(huán)遞增 ),知道 point整除 10的 N次方等于 0的時候 ,現(xiàn)在的 N就是這個整數(shù)的位數(shù)。 求出 point每一位上的數(shù)字的算法:使用 for循環(huán),這是個反循環(huán)從 N( N剛才已求出)循環(huán)到 0, point整除 10的 N次方,然后減去最高位(比如 1100,剔除 1000還剩 下 100,現(xiàn)在百位為最高位)。當(dāng)循環(huán)結(jié)束的時候,每一位上的數(shù)字也就都求出來了。如果要畫到屏幕上,直接把畫圖的語句寫到循環(huán)體內(nèi),就在求出數(shù)字之后。 7. 對象池 游戲中的所有出現(xiàn)在屏幕上的敵機都是對象,為了節(jié)約內(nèi)存,我最初想法 是 需要 刷新敵機的時候就實例化一個新對象出來,飛機被擊爆或者飛出屏幕的時候 就釋放對象。 結(jié)果在調(diào)試這部分代碼的時候我發(fā)現(xiàn)實例化一個新對象的時候仿真器需要花費2030毫秒的時間,如果一次要實例化多架敵機的話就會出現(xiàn)掉幀的現(xiàn)象。 濰 坊 學(xué) 院 本 科 畢 業(yè) 設(shè) 計 24 為了解決這一問題我使用了對象池技術(shù)。在游戲初始化的時候通過 Plane類實例化了5個敵機對象出來,需要刷新敵機的時候就檢查對象池中是否 有空閑對象,如果有就將對象畫到屏幕上,如果沒有 就一直等待對象池中有空閑對象可以使用。這里說的等待并不是指的線程阻塞,而是說的是在對象池中空閑對象個數(shù)達(dá)不到需要刷新敵機的個數(shù)時,程序每一幀都會檢測空閑對象的個數(shù)并阻止其它方法來使用空閑對象,直到將正確數(shù)量的敵機刷新出去以后才結(jié)束等待并解除阻止。濰 坊 學(xué) 院 本 科 畢 業(yè) 設(shè) 計 25 5 后期優(yōu)化與平臺移植 這一章講述代碼優(yōu)化對于編寫高效的手機游戲的重要性。我將講述何時使用何種方法來優(yōu)化你的代碼,使得我們的程序盡可能的挖掘 MIDP在手機中所剩無幾的表現(xiàn)力。 為什么要優(yōu)化 游戲能夠被劃分為兩種較廣泛的類型:實時型和按鍵驅(qū)動型。按鍵驅(qū)動類型的游戲一般在屏幕上顯示游戲目前所處的狀態(tài),并且等待玩家輸入某些按鍵來驅(qū)動游戲繼續(xù)運行。棋牌類游戲,大部分的解謎類游戲以及策略類和文字類游戲都屬于這類游戲。而實時游戲,特別是動作游戲(飛行射擊游戲應(yīng)該屬于動作游戲的一種)不會等待玩家的輸入,他們一直運行直到游戲的結(jié)束。 動作類游戲一個重要的特征就是將大量的運算花在屏幕顯示上,而且刷新率必須保持在 10赫茲 以上。這類游戲還必須要有大量的動作來使得 游戲具有更高的挑戰(zhàn)性。這類游戲需要玩家有快速的反應(yīng)和很好的手眼協(xié)調(diào)能力,所以這類游戲?qū)︽I盤輸入的反應(yīng)也有極高的要求。為使得程序在高速運行時能對鍵盤做出及時的反應(yīng),圖像能以高速的刷新率來運行,我們就必須優(yōu)化代碼,以使得程序以最快的速度運行。 何時不用優(yōu)化 如果編寫的游戲不是動作游戲,有可能不必去優(yōu)化。假如玩家需要幾秒鐘甚至幾分鐘去思考他下一步怎樣走,那他將不會注意到你的游戲的按鍵響應(yīng)超過幾百毫秒。不過一個例外是如果你的程序需要大量的運算去決定它下一步怎樣走,例如棋類游戲需要在幾百萬種組合中去尋找。假 如這樣的話,你有可能想要優(yōu)化你的代碼以使得 CPU 僅需要幾秒鐘而不是幾分鐘去決定他下一步的動向。 即使你正在編寫這類游戲,優(yōu)化也是相當(dāng)危險的。這些技術(shù)將伴隨著高昂的代價,他將使你的代碼不易讀。這就需要開發(fā)者自己去平衡。增大了 JAR文件的大小來換取程序少量性能的提高是否是值得的。下面給出不要去優(yōu)化的更多的理由。 1. 優(yōu)化將很容易引入 bug; 2. 有些優(yōu)化技術(shù)將使得移植變得困難; 3. 有可能你付出了巨大的努力卻收效甚微; 4. 統(tǒng)一的優(yōu)化一般比較困難。 對最后一點的解釋:由于優(yōu)化的是一個不定的目標(biāo)及平臺, 有些方法可能在 Java平濰 坊 學(xué) 院 本 科 畢 業(yè) 設(shè) 計 26 臺上運行快一點,而有些可能在 J2ME平臺上運行快一點。由于執(zhí)行環(huán)境存在著巨大的差異,你的代碼可能在仿真器上跑得很快,但是在真機上卻很慢。反之也有可能。你對一種機型的優(yōu)化可能會造成在另一種平臺上性能的下降。 從哪里開始優(yōu)化 最直接的方式是使用 J2ME Wireless Toolkit的 Profiler去剖析你的代碼的運行效率,它也將幫助你更精確的測量出這些技術(shù)對于提高性能的有效性。 在動作類游戲中, 90%的程序執(zhí)行時間被花費在了 10%的代碼段中。這 10%的代碼段是我們需要集中 全力去優(yōu)化的部分。我們將使用 profiler去找到這 10%代碼的位置。見圖 。 圖 profiler 檢測的結(jié)果 左邊窗口的百分?jǐn)?shù)代表該函數(shù)所占用 CPU百分比,這個百分比是總執(zhí)行時間花在每個特定函數(shù)上的百分比,我們只要找到占用百分比最多的那個函數(shù)來優(yōu)化就可以了。在我的游戲里 (%) CPU時間最多,所以我們著重對這部分代碼 進行 優(yōu)化 。 濰 坊 學(xué) 院 本 科 畢 業(yè) 設(shè) 計 27 將樹型結(jié)構(gòu)展開,查找 paint()方法里最費時間的方法。發(fā)現(xiàn)占用 CPU時間最多的一部分就是 setClip()這是 J2ME為我們提供的函數(shù),已經(jīng)沒法再優(yōu)化了。展開所有樹型結(jié)構(gòu),發(fā)現(xiàn) CPU占用時間較平均,除了 setClip()和 drawImage()兩個方法占用的時間在 10%左右以外,其它方法占用的時間都在 10%以下。幾乎已經(jīng)沒有什么可以優(yōu)化的了。 結(jié)論 ? 通過實踐及查閱相關(guān) 數(shù)據(jù),得到了以下結(jié)論: ? 在做低級優(yōu)化之前,要先思考算法是否是最優(yōu); ? 繪圖是很占用時間的,所以盡可能的減少 Graphics 函數(shù)的調(diào)用; ? 盡可能的將變量定義在循環(huán)以外; ? String 類很容易產(chǎn)生垃圾內(nèi)存,盡可能的使用 StringBuffer 代替 String 或用 final static 來定義之; ? 假設(shè)是不被接受的,一切要以真機為據(jù); ? 對于頻繁調(diào)用的函數(shù)要使用盡可能少的參數(shù); ? 盡可能的不使用函數(shù)調(diào)用; ? 與 0 值 比較比與其它數(shù)值比較快; ? 局部變量比其它類型的變量運算要快; ? 在 switch()中盡量使用連續(xù)的小數(shù)值判斷; ? 盡量使用乘法而不使用除法; ? 盡量使用已有 的 算法。 濰 坊 學(xué) 院 本 科 畢 業(yè) 設(shè) 計 28 結(jié)束語 本畢業(yè)設(shè)計研究開發(fā)了一個手機游戲的基本框架、分析開發(fā)流程、在這個游戲中運用的算法、技術(shù)和最后如何測試優(yōu)化代碼,實現(xiàn)了一款可在多種環(huán)境平臺下運行的 java手機游戲, 該游戲能夠?qū)崿F(xiàn)主機的射擊、翻滾、平移,前進,敵機的射擊、與主機碰撞,基本上滿足了玩家的需求。 在何時使用何種方法來優(yōu)化代碼,挖掘 MIDP在手機中的表現(xiàn)力,游戲內(nèi)容內(nèi)容的單一化等方面仍需進一步改進。 濰 坊 學(xué) 院 本 科 畢 業(yè) 設(shè) 計 29 參考文獻(xiàn) [1] 黃聰明 .精通 java2程序設(shè)計 [M](第一版) .北京: 清華大學(xué)出版社 .:527 [2] 胡虛懷 .J2ME移動設(shè)備程序設(shè)計 [M](第二版) .北京: 清華大學(xué)出版社 .:1023 [3] 詹建飛 .J2ME開發(fā)精解 [M](第二版 ).北京: 電子工業(yè)出版社 .:1125 [4] 郝玉龍,李向前 .J2ME 移動應(yīng)用開發(fā) [M](第三版 ).北京: 清華大學(xué)出版社 .:516 [5] 耿祥義 .java大學(xué)實用教程 [M](第一版) .北京: 電子工業(yè)出版社 .:1920 [6] 溫尚書 . J2ME無線通信實用案例教程 [M](第二版 ).北京: 電子工業(yè)出版社 .:821 [7] 林信良 .Java JDK6 學(xué)習(xí)筆記 [M] (第三版 ).北京: 清華大學(xué)出版社 .:1318 [8] 印旻 . Java 語言與面向?qū)ο蟪绦蛟O(shè)計 [M] (第三版 ).北京: 清華 大學(xué)出版社 .:629 [9] 陳剛 . Eclipse從入門到精通 (第三版 ) [M].北京: 清華大學(xué)出版社 .:2027 [10] 李振鵬 龔劍 , J2ME手機游戲開發(fā)技術(shù)詳解北 [M].北京: 清華大學(xué)出版社 .:828 [11] 施錚 .J2ME無線移動游戲開發(fā) [M] (第三版) .北京: 清華大學(xué)出版社 .:2027 [12] 陸光義 Java游戲編程導(dǎo)學(xué) [M](第二版) .北京: 清華大學(xué)出版社 .:913 [13] 呂建德 .游戲程序設(shè)計概論 [M](第 二版) .北京: 中國鐵道出版社 :1026 [14] 張霞 .Java 2游戲設(shè)計 [M](第三版) .重慶: 重慶大學(xué)出版社 . :719 [15] 張超 .游戲開發(fā)能手 —— 精彩游戲自己編 [M](第二版) .北京 :人民郵電出版社 .:1226 [16] 劉勁松 .游戲軟件設(shè)計概論 [M](第三版) .北京 : 機械工業(yè)出版社 .:1427 濰 坊 學(xué) 院 本 科 畢 業(yè) 設(shè) 計 30 附錄 此部分為飛機射擊類游戲 —— 重裝火炮 Canvas 類的部分 源程序,主要代碼如下: package 。 import .*。 import .*。 import .*。 import .*。 import .*。 public class GameCanvas extends FullCanvas implements Runnable{ private static int WIDTH 。 private static int HEIGHT 。 Thread th 。 private boolean killthread。 private boolean stopthread。 boolean showexit。 boolean showpause。 boolean gameover,showover。 private Score highscore = null。 private static boolean gun_left。 private static boolean gun_right。 private static boolean fire[] = new boolean[4]。 private static boolean win = false。 private static int gun_x。 //大炮的 X 坐標(biāo) private static int gun_y。 //大炮的 Y 坐標(biāo) private static int shot_x[] = new int[4]。 //炮彈的 X 坐標(biāo) private static int shot_y[] = new int[4]。 //炮彈的 Y 坐標(biāo) private int shotNum。 private static int gun_width。 private static int gun_height。 private static int cdegree = 0。 private static int tdegree[] = {0,0,0,0}。 //temp degree 濰 坊 學(xué) 院 本 科 畢 業(yè) 設(shè) 計 3
點擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1