2010-03-13 69 views
2

我正在開發適用於Android的國際象棋遊戲(androidchess.appspot.com)。如果我想添加動畫,我應該使用自定義View擴展Canvas(我現在這樣做),還是自定義View擴展SurfaceView?如何在Android國際象棋遊戲中製作動畫

+0

我編輯了我的回覆,添加了更多信息。 (如果您依賴「您有新的回覆」功能,我將使用此評論,如果編輯的答案不會通知您) – 2010-03-14 19:02:48

回答

3

我還沒有使用View延長Canvas試過,但我的遊戲,我用同樣的方法爲LunarLander例如遊戲:

public class CustomView extends SurfaceView implements SurfaceHolder.Callback 

這樣做的用處是可以讓你把手對於SurfaceHolder(因此您可以調出繪製到屏幕的畫布)以及surfaceCreated,surfaceChangedsurfaceDestroyed的回調。這可以讓你做一些事情,比如一旦表面可用就繪製一個自定義的動畫,或者確保你沒有在畫布停用後畫圖。通過LunarLander查看應該告訴你如何正確使用這些。


編輯:我記得爲什麼使用SurfaceHolder有用的另一個原因。這是因爲,正如我上面提到的,它可以讓您直接訪問畫到屏幕的畫布。使用SurfaceHolder,這不是通過重寫onDraw來完成的,而是通過使用類似Canvas canvas = mSurfaceHolder.lockCanvas()的東西來完成的。 (有關確切的語法,請參閱LunarLander)。這很重要的原因是因爲它可以讓您準確控制圖形發生的時間。如果你只能通過覆蓋onDraw()來工作,那麼繪圖不會發生,直到你的程序達到「等待」階段。換句話說,你不能在循環中使用invalidate()onDraw(),因爲直到循環結束,繪圖纔會發生。而且由於你很可能會使用循環來繪製一塊在屏幕上移動的東西,這就成了一個問題。

注意:可能通過使用多個線程來避免此問題。我只是沒有嘗試過,因爲它不是我的遊戲所必需的;唯一的動畫是固定長度的動畫響應用戶輸入,而不是在後臺連續移動,所以我還沒有嘗試過多線程。

+0

感謝您的幫助,我決定使用SurfaceView。順便說一句,我可以在市場上找到你的遊戲嗎? – fhucho 2010-03-15 17:42:31

+0

沒問題。至於我的遊戲,它幾乎已經完成,但還不完全:)這是一個拼圖遊戲,很有趣,但仍然很簡單,可以教會自己所有的基本知識。 – 2010-03-15 21:30:05