這個需要很深的知識,包括對手機(jī)系統(tǒng)硬件的知識和游戲編程的知識,先發(fā)一個大概看看: 手機(jī)游戲移植主要的工作是把原來的一款別的型號手機(jī)上的游戲。經(jīng)過修改能在當(dāng)前型號的手機(jī)上運行和使用的過程。所以可以把這個工作細(xì)分為幾方面的事情: 1、處理屏幕尺寸 這也是最重要的一點。不同型號的手機(jī)。屏幕大小不同。分辨率不同。所以要保證每款游戲放在每種型號的手機(jī)上都能達(dá)到同樣的運行效果。那的確是件困難的事情。所以移植的時候就盡量找差距較小的機(jī)型做移植。程序中需要注意的就是雙緩沖的尺寸。和畫面內(nèi)容的位置。當(dāng)然最愿意看到的就是能有個全局變量來控制整個游戲場景。 2、修改按鍵值 這是另一個重要的方面。確保游戲能夠正常的操作的前提條件。比如NOKIA的機(jī)型的左右軟鍵分別是-6,-7,而Motorola的C650的左右軟鍵就是-21,-22。所以這種差別是無法回避的。除非你的手機(jī)游戲程序能夠適應(yīng)不同的機(jī)型產(chǎn)生不同的鍵值。我上個月做的一款游戲就是這樣的。而且適應(yīng)不同的屏幕大小。的確很不錯程序。 3、處理內(nèi)存占用 這是另一個無法回避的問題。如果你的手機(jī)性能不錯。那也許你不用考慮。比如你做motorola E680的游戲。但是多數(shù)機(jī)型的內(nèi)存容量是你需要重點考慮到的。我見過很多游戲移植到新機(jī)型時出現(xiàn)很多難以解釋的問題。一般都是由內(nèi)存不夠引起的。比如圖片無法顯示。游戲無法安裝。死機(jī)等現(xiàn)象。所以我們移植的過程中。就要事先計算好你的內(nèi)存占用情況。把無用的對象設(shè)置為NULL。 4、完整漢化 某些游戲是英文界面的。所以如果要符合中國 移動的規(guī)范來做。還必須保證沒有一個英文字符出現(xiàn)。不過這聽起來也有點強(qiáng)人所難。 比如游戲中的LAP 1/3 賽道的第幾圈。 你非要改成 圈 1/3 。但是也沒辦法。符合規(guī)范是你提交游戲的前提保證。漢化中可能出現(xiàn)的問題就是。如果文字被做成圖片了,你需要通過美工的協(xié)助來完成工作。 5、游戲的功能修改 很多時候如果你要保持與中國 移動的規(guī)范相同。就要修改左右功能鍵的位置。以及還要涉及到給游戲添加暫停和繼續(xù)的功能。甚至有時候你需要自己寫個游戲菜單。并且添加一些LOGO界面。 上面提到的方面。多數(shù)都是移植中必須處理的工作內(nèi)容。如果你碰到了難以讓你下手的游戲。不要著急。因為代碼不是你寫的。如果你看著頭暈,可以先從簡單的入手。然后理清思路。下面談?wù)勔浦策^程中一般的步驟。 1、查看資源文件 這是最重要的。是你修改游戲的前提條件。如果你連資源文件都不清楚是什么,那你無法完成剩下的工作。資源文件有幾種。比如單純的圖片。PNG格式(日本DOJA的游戲圖片格式是GIF)、聲音文件、文本文件、數(shù)據(jù)文件等等。這里要提一下數(shù)據(jù)文件。一般把除了圖片,聲音,文本以外的格式的文件都叫數(shù)據(jù)文件。不過這類文件是我不希望看到的。因為它不便于與修改。有些游戲為了讀取資源的方便。和占用空間的考慮。會把圖片文件做成一個數(shù)據(jù)文件來處理。以前都是用Ultraedit把這個數(shù)據(jù)文件打開。然后一段一段的通過提取PNG格式的數(shù)據(jù)。然后從新保存成PNG文件。很麻煩。后來寫了兩個工具。一個程序用來提取圖片。一個程序用來從新生成數(shù)據(jù)文件。感覺方便了許多。 2、閱讀代碼的技巧 代碼是必須得讀的。否則就不叫修改了。但是也不用你都讀懂,讀透。而且不用每句都看全了,如果上萬行的代碼。你把每句看一遍。也夠你累的。而且在BOSS規(guī)定的時間內(nèi)完成不了。你也麻煩。我一般首先要看實現(xiàn)游戲主要場景和功能的類。也就是所謂的Canvas類。因為這個類肯定不是自己啟動的。要通過MIDlet主類加載。或者再委婉一些通過另外的類加載。所以其他的類都是輔助這個類來完成游戲功能的。然后看看這個類的導(dǎo)入了哪些包。 繼承自什么類。實現(xiàn)了什么接口。然后再看它的構(gòu)造函數(shù)。以及paint()方法。如果有線程的話,還要看看run()里面的代碼。這些就是這個游戲的主要切入點。控制著游戲的進(jìn)程和繪圖。其他的像游戲中的算法之類的東東。如果有時間。你就好好研究一下。這對你來說是很有意義的。 3、不要相信模擬器 做不同牌子手機(jī),不同型號的手機(jī)游戲,肯定會用到模擬器來運行。看看效果。用看看效果這個詞已經(jīng)很貼切了。因為有些游戲模擬器都運行不了。你連效果都看不到的。所以必須要用真實的手機(jī)運行和測試。但是按鍵值也必須用真機(jī)測出來。雖然多數(shù)模擬器和對應(yīng)的真機(jī)相同。 4、解決不同手機(jī)的BUG 最頭疼的事情也就是這個了。會出現(xiàn)一些莫名其妙的錯誤。明明在這個手機(jī)上運行的很好。可是到另外一個手機(jī)上就出現(xiàn)意想不到的錯誤。比如無法安裝。圖片無法顯示。玩到某個地方死機(jī)。聲音無法播放等等。遇到問題先不要著急。冷靜的回想一下代碼和上一次修改的過程。如果都排除人為原因。那就從內(nèi)存 和圖片 來考慮。有些時候 repaint() 和ServiceRepaints() 也會出現(xiàn)問題。比如NOKIA 新 S60系統(tǒng)。 而且考慮問題不要太片面。因為游戲本身就是一個環(huán)環(huán)相扣的過程。 另外還要說說手機(jī)內(nèi)存的處理。這是個經(jīng)典的話題。什么String的使用,System.gc()之類的。以及將無用的對象設(shè)置為NULL。這些網(wǎng)上都有相關(guān)的討論。以及static的用法。提一個地方。就是在手機(jī)加載圖片時。手機(jī)中計算圖片占用的內(nèi)存是:圖片長×圖片寬×圖片顏色數(shù)×2。甚至一幅透明的圖片和一幅單色的同樣尺寸的圖片占用的內(nèi)存都是很接近的。另外要少用Graphics.drawString() 。有空可以自己寫程序測試一下。如果你寫了一篇文字。用了N個這個語句。那就應(yīng)該看看。是否需要替換成一個String數(shù)組。或是做成圖片占內(nèi)存更少一些。
