Android SurfaceView和动画图形



我想用角色资源中的图形制作一个"2d游戏"。现在我在问自己什么是最好的解决方案。

我在网上搜索了很多,找到了两种不同的选择。

  • A) 创建自定义视图,将其添加到显示AnimationDrawable或
  • B) 使用SurfaceView直接在其上绘制

虽然a)在游戏中通常被称为慢且不表现,但我试图为b)找到一个解决方案。但到目前为止,所有教程都只使用一张在表面上移动的图像View或设置几何形状的动画(这不是我真正想要的)。很少能找到"如何在SurfaceView上绘制AnimationDrawable"的教程。

所以我想我可以将角色的所有动画帧加载到一个数组中,每次调用SurfaceView上的正确帧。但对我来说,这听起来是一个很大的开销。我应该放弃SurfaceView吗?

有人知道什么是最好的动画方式吗?比如说,在我的屏幕上有10个字符+"背景"?

您(至少)有三个选项:

  1. 在曲面上绘制使用画布查看曲面。这将使用软件渲染,并且速度相对较慢
  2. 使用画布在自定义视图上绘制,而不是在SurfaceView上绘制。这将是硬件加速的,但有一些限制
  3. 使用OpenGL ES在SurfaceView曲面上绘制。这将是硬件加速的,但你必须弄清楚GLES是如何工作的

你还应该考虑(4)使用开源的2D游戏引擎,不要担心它实际在做什么。

如果你想要一个例子,Android Breakout是一个为GLES和GLSurfaceView编写的简单但完整的2D游戏。在Grafika中可以找到一组更进化的EGL/GLES辅助对象,它使用GLSurfaceView、SurfaceView和TextureView来完成各种任务。它还演示了使用硬件缩放器来提高大型显示器的效率。

这里提供了Android图形架构的详细描述。

好吧,我不确定这是最好的选择,但我找到了一个使用"精灵表"的教程。

http://www.edu4java.com/en/androidgame/androidgame4.html

到目前为止,这似乎是一个很好的解决方案。OpenGL对我来说似乎有点太多了,但也许我不擅长着色器语言等。因此,如果有人找到更好的解决方案,请告诉我。

最新更新