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