我正在为 Android 开发国际象棋游戏(androidchess.appspot.com http://androidchess.appspot.com)。如果我想添加动画,我应该使用扩展Canvas的自定义View(我现在这样做),还是扩展SurfaceView的自定义View?
我还没有尝试过使用View
延长Canvas
,但对于我的游戏,我使用与 LunarLander 示例游戏相同的方法:
public class CustomView extends SurfaceView implements SurfaceHolder.Callback
这样做的用处在于,它为您提供了 SurfaceHolder 的句柄(这样您就可以调用绘制到屏幕上的画布),以及回调surfaceCreated
, surfaceChanged
and surfaceDestroyed
。这使您可以执行一些操作,例如在表面可用时立即绘制自定义动画,或者确保您在画布停用后不会尝试绘制到画布上。浏览 LunarLander 应该会告诉你如何正确使用这些。
编辑:我记得使用 SurfaceHolder 有用的另一个原因。这是因为,正如我上面提到的,它可以让您直接访问绘制到屏幕上的画布。对于 SurfaceHolder,这不是通过重写 onDraw 来完成的,而是通过使用类似的东西来完成Canvas canvas = mSurfaceHolder.lockCanvas()
。 (有关确切语法,请参阅 LunarLander)。这很重要,因为它可以让您准确控制绘图发生的时间。如果您只能通过重写 onDraw() 来工作,那么直到您的程序到达“等待”阶段时绘图才会发生。换句话说,你不能使用invalidate()
and onDraw()
循环中,因为在循环结束之前绘图不会发生。由于您可能会使用循环来绘制在屏幕上移动的棋子之类的事情,因此这成为一个问题。
注意:使用多线程也许可以避免此问题。我只是没有尝试过,因为我的游戏不需要它;唯一的动画是响应用户输入的固定长度动画,而不是在后台连续移动的动画,所以我还没有尝试过多线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)