所以不少東西都要自己慢慢打造,當然這可以享受自己造車的快感
而且也能學到更多東西。
一開始的時候參考了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的警告也幾乎不會出現了
而且在類別設計上更容易更有彈性,雖然重構花了不少時間,但卻相當值得。
最後,附上一張遊戲選單的畫面
沒有留言:
張貼留言