2014-09-29 77 views
0

我想使用来自资源的图形为角色制作“2D游戏”。 现在我问自己什么是最好的解决方案。Android SurfaceView和动画图形

我在网上搜寻了很多,发现了两个不同的选项。

  • A)创建自定义视图,将其添加到布局示出使用SurfaceView直接画一个AnimationDrawable或
  • B)在其上

鉴于a)中通常被称为慢速和unperformant为我尝试为b)找到解决方案。 但到目前为止,所有的教程都只是在surfaceView或动画几何图形上移动一个图像(这不是我真正想到的)。 寻找“如何在SurfaceView上绘制AnimationDrawable”的教程非常少见。

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

有没有人一个好主意什么是最好的动画方式 - 让我的屏幕上说10个字符+“背景”?

+0

准备好使用GL等Android版本的库/框架。如果你想使用SurfaceView,实现你自己的Sprite类等等,那么使用Android组件很冷。 – eduyayo 2014-09-29 12:36:47

+0

嗯,我不想使用openGL,因为它只是一个2D游戏。更像典型的跳跃和跑步游戏。实际上,我所需要的只是一种在SurfaceView上绘制AnimationDrawable的方法,但似乎并未得到支持。 – 2014-09-29 12:50:47

+0

使用GL并不意味着会有3d gfx,并且GL渲染速度更快。对于带有sfx的按钮,AnimationDrawable可能会很酷,在屏幕上移动这样的东西会变得麻烦。 – eduyayo 2014-09-29 13:05:51

回答

1

你有(至少)三个选项:上SurfaceView表面

  1. 绘制的画布。这将使用软件渲染并且相对较慢。
  2. 代替SurfaceView,用画布绘制自定义视图。这将通过硬件加速,some limitations
  3. 使用OpenGL ES在SurfaceView表面上绘制。这将会硬件加速,但你必须弄清楚GLES是如何工作的。

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

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

Android图形体系结构的详细说明可用here

+0

嘿谢谢。所以你说,绘制到SurfaceView比使用AnimationDrawable创建单独的视图慢?我认为这将是相反的方式。我读过一些使用Views的地方有很多开销! – 2014-09-29 15:45:43

+0

http://developer.android.com/guide/topics/graphics/hardware-accel.html指出画布(来自我绘制的surfaceView)也是硬件加速的。或者不是吗? – 2014-09-29 15:52:48

+0

SurfaceView有两部分,“表面”和“视图”。视图部分只是一个透明的占位符,用于其他视图的布局; Surface是一个完全独立的图层,坐落在具有Views的图层后面。渲染完成到Surface。你*可以*渲染到一个SurfaceView的视图部分,但这将是毫无意义的(并浪费系统资源)。在任何情况下,Canvas渲染到视图都会加速,Canvas渲染到Surface将不会。 – fadden 2014-09-29 17:45:12

0

好吧,我不确定这是最好的选择,但我找到了使用“雪碧表”的教程。

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

到目前为止,这似乎是一个很好的解决方案。 OpenGL对我来说似乎有点太多,但也许我不擅长Shader Language等。 所以如果有人找到更好的解决方案,请告诉我。

+0

它看起来非常好!顺便说一下,当你使用http://www.andengine.org/或者其他类似的软件时,你不需要3D编程知识。 – eduyayo 2014-09-29 15:37:54