我正在開發適用於Android的國際象棋遊戲(androidchess.appspot.com)。如果我想添加動畫,我應該使用自定義View擴展Canvas(我現在這樣做),還是自定義View擴展SurfaceView?如何在Android國際象棋遊戲中製作動畫
回答
我還沒有使用View
延長Canvas
試過,但我的遊戲,我用同樣的方法爲LunarLander例如遊戲:
public class CustomView extends SurfaceView implements SurfaceHolder.Callback
這樣做的用處是可以讓你把手對於SurfaceHolder(因此您可以調出繪製到屏幕的畫布)以及surfaceCreated
,surfaceChanged
和surfaceDestroyed
的回調。這可以讓你做一些事情,比如一旦表面可用就繪製一個自定義的動畫,或者確保你沒有在畫布停用後畫圖。通過LunarLander查看應該告訴你如何正確使用這些。
編輯:我記得爲什麼使用SurfaceHolder有用的另一個原因。這是因爲,正如我上面提到的,它可以讓您直接訪問畫到屏幕的畫布。使用SurfaceHolder,這不是通過重寫onDraw來完成的,而是通過使用類似Canvas canvas = mSurfaceHolder.lockCanvas()
的東西來完成的。 (有關確切的語法,請參閱LunarLander)。這很重要的原因是因爲它可以讓您準確控制圖形發生的時間。如果你只能通過覆蓋onDraw()來工作,那麼繪圖不會發生,直到你的程序達到「等待」階段。換句話說,你不能在循環中使用invalidate()
和onDraw()
,因爲直到循環結束,繪圖纔會發生。而且由於你很可能會使用循環來繪製一塊在屏幕上移動的東西,這就成了一個問題。
注意:可能通過使用多個線程來避免此問題。我只是沒有嘗試過,因爲它不是我的遊戲所必需的;唯一的動畫是固定長度的動畫響應用戶輸入,而不是在後臺連續移動,所以我還沒有嘗試過多線程。
感謝您的幫助,我決定使用SurfaceView。順便說一句,我可以在市場上找到你的遊戲嗎? – fhucho 2010-03-15 17:42:31
沒問題。至於我的遊戲,它幾乎已經完成,但還不完全:)這是一個拼圖遊戲,很有趣,但仍然很簡單,可以教會自己所有的基本知識。 – 2010-03-15 21:30:05
- 1. 「跟隨國際象棋」直播國際象棋遊戲如何?
- 2. 國際象棋遊戲無效移動
- 3. JavaScript中的國際象棋遊戲
- 4. Java在線國際象棋遊戲
- 5. 國際象棋遊戲人工智能
- 6. 國際象棋遊戲忠告
- 7. 國際象棋,遊戲板翻轉?
- 8. 國際象棋Java遊戲錯誤
- 9. C#3D國際象棋遊戲
- 10. prolog的國際象棋遊戲
- 11. 製作一個國際象棋多人遊戲
- 12. 國際象棋遊戲中的女王運動(Javascript)
- 13. 如何整合Valil象棋引擎Unity3d國際象棋遊戲[C#]?
- 14. 如何編程一個國際象棋遊戲的AI
- 15. 如何使用BuffereImage進行國際象棋遊戲
- 16. 這款國際象棋遊戲如何實現?
- 17. 國際象棋遊戲,改變正在迭代的對象。
- 18. 在C中優化國際象棋遊戲
- 19. 在Java中製作象棋遊戲,我想移動棋子
- 20. 面向對象的國際象棋遊戲設計
- 21. (國際象棋遊戲)返回可能棋子移動的函數
- 22. 將圖像插入國際象棋遊戲中的代碼c#
- 23. 爲局域網製作國際象棋遊戲所需的幫助
- 24. 如何在C#中編寫像遊戲一樣的國際象棋?
- 25. 在android中設計國際象棋
- 26. 國際象棋:獲得所有合法國際象棋棋子
- 27. C++/OpenGL國際象棋遊戲程序設計建議
- 28. 國際象棋遊戲C,對齊問題
- 29. 國際象棋遊戲的設計和Singleton模式
- 30. 幫助設計一個國際象棋遊戲
我編輯了我的回覆,添加了更多信息。 (如果您依賴「您有新的回覆」功能,我將使用此評論,如果編輯的答案不會通知您) – 2010-03-14 19:02:48