android - 如何在Android国际象棋游戏中制作动画

标签 android animation

我正在为 Android 开发国际象棋游戏 ( androidchess.appspot.com )。如果我想添加动画,我应该使用扩展Canvas的自定义View(我现在这样做),还是扩展SurfaceView的自定义View?

最佳答案

我还没有尝试过使用 View延长Canvas ,但对于我的游戏,我使用与 LunarLander 示例游戏相同的方法:

public class CustomView extends SurfaceView implements SurfaceHolder.Callback

它的用处在于它为您提供了 SurfaceHolder 的句柄(以便您可以调用绘制到屏幕上的 Canvas ),以及 surfaceCreated 的回调。 , surfaceChangedsurfaceDestroyed 。这使您可以执行一些操作,例如在表面可用时立即绘制自定义动画,或者确保您在 Canvas 停用后不会尝试绘制到 Canvas 上。浏览 LunarLander 应该会告诉你如何正确使用这些。


编辑:我记得使用 SurfaceHolder 有用的另一个原因。这是因为,正如我上面提到的,它可以让您直接访问绘制到屏幕上的 Canvas 。对于 SurfaceHolder,这不是通过重写 onDraw 来完成的,而是通过使用类似 Canvas canvas = mSurfaceHolder.lockCanvas() 的东西来完成。 。 (有关确切语法,请参阅 LunarLander)。这很重要,因为它可以让您准确控制绘图发生的时间。如果您只能通过重写 onDraw() 来工作,那么直到您的程序到达“等待”阶段时绘图才会发生。换句话说,你不能使用 invalidate()onDraw()循环中,因为在循环结束之前绘图不会发生。由于您可能会使用循环来绘制在屏幕上移动的棋子等操作,因此这会成为一个问题。

注意:使用多线程也许可以避免此问题。我只是没有尝试过,因为我的游戏不需要它;唯一的动画是响应用户输入的固定长度动画,而不是在后台连续移动的动画,所以我还没有尝试过多线程。

关于android - 如何在Android国际象棋游戏中制作动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2438733/

相关文章:

java - Apache HttpClient 获取添加字节范围 header ?

Android SDK 没有检测到我的 Android 2.3 手机,但我的系统仍然可以识别我的设备

html - CSS弹跳线加载器动画

java - 在 Android 中使用谷歌地图在自定义信息窗口上动画

javascript - 可观察到的 knockout 是否可以实现数字动画行为?

java - 沿着具有附加要求的路径制作动画

jquery - 进入视口(viewport)时显示 svg 动画

Android 为来自 WebView 的视频启动 mediplayer?

java - 如何将 If 语句放入事务 Firebase Firestore

android - 在Android应用程序中显示大量数据(大多数文本)