2009年6月14日 星期日

Android 遊戲製作心得

這幾天嘗試用Android去寫一個遊戲,由於他不像J2ME有豐富的遊戲套件
所以不少東西都要自己慢慢打造,當然這可以享受自己造車的快感
而且也能學到更多東西。

一開始的時候參考了LunarLander這個Goolge官方範例,使用Drawable家族的BitmapDrawable來作繪圖的動作,但是這是我一開始作的最大的錯誤的決定。

使用BitmapDrawable來繪圖真的只能用萬劫不復來形容我的心情,不但要多用一層warpper去包Bitmap而導致Constructor使用的困難,要設定圖片座標一定得用setBound函式,更重要的是只用BitmapDrawable還不能更改Bitmap,一定得用BitmapDrawable陣列去做,後來去trace一下BitmapDrawable的原始碼,他把setBitmap這個動作設成private,幾乎是綁定了一個BitmapDrawable一個Bitmap。

而這還不打緊,更痛苦的是使用BitmapDrawable更讓我遊戲效率大幅下降,Lag頻頻(算FPS可能不到十張吧)。看了一下原始碼BitmapDrawable的draw還真作不少事,而且三不五時就會跳出

Android ......... not responding

這樣的警告訊息(中間的字忘了),CPU內存不夠,遊戲無法接受我的input,必須選擇wait讓CPU有時間去執行我的input。

後來改用Canvas的drawBitmap函式直接去繪畫Bitmap後,一切都迎刃而解
不但效率大幅提高,Android not responding的警告也幾乎不會出現了
而且在類別設計上更容易更有彈性,雖然重構花了不少時間,但卻相當值得。

最後,附上一張遊戲選單的畫面

沒有留言: