安卓游戏,canvas或opengl?

我要为android编写一个游戏,我必须在canvas或opengl之间进行绘图。 我已经看过canvas没有很好的框架,但什么好? 想象一下,你要写一个愤怒的小鸟游戏,canvas帧率是否足够?

Solutions Collecting From Web of "安卓游戏,canvas或opengl?"

我最初使用Canvas编写游戏,但之后需要切换到OpenGL,原因如下:

  • 使用canvas,你的精灵存储在堆上(除非你专门将它们caching到磁盘上),这将根据手机对精灵资源的总大小进行限制 – 不好! 我发现这是我的手机大约42mb – 注意这是未压缩的位图大小。 如果你有几种types的实体,每个都有不同的animation,那么你可以很快达到这个尺寸。

  • OpenGL将你的精灵资源单独存储到堆中,从而显着增加可用内存。

  • 帆布不能很好地缩放。 您拨打的(。)电话越多,运行速度就会越慢。 这种关系是相当线性的。

  • 使用OpenGL,您可以将您的绘图调用批处理以提高性能。

从OpenGL开始,Canvas似乎很有吸引力。 但是,从经验,我希望我刚刚开始使用OpenGL。 我的build议是“咬紧牙关”,如果你正在做一个游戏,那就selectOpenGL吧。

为了让事情变得更容易,我写了一些有用的实用程序类,为您完成所有基本的OpenGL。 它们允许您使用类似于使用Canvas的简单.draw(..)调用。 下面的video教程应该让你开始:

http://www.youtube.com/watch?v=xc93rN2CGNw

编辑:03/04/13

看来,随着更新的Android设备和操作系统的出现,谷歌已经提高了Canvas的性能。 上面描述的实用工具类的用户在做了一些基准testing之后,通过以下电子邮件回复了我:

在每个canvas上随机抽取500个精灵。

结果如下:Huawei Honor(姜饼,单核1.4 Ghz):SpriteBatcher:19-20 FPS,Canvas:23-24 FPS

Nexus 7(果冻豆,4芯1.3 Ghz):SpriteBatcher:29-30 FPS,帆布:57-58 FPS

现在,在对这个用户的回复中,我解释说,这可能是因为我写了实用类SpriteBatcher的方式效率低下。 然而,从我自己的使用经验,在运行Froyo 2.2的HTC Desire上回到Canvas,我可以说这是精灵的绝对较慢的精灵!

在后来的操作系统和设备上,它可能已经超越了效率,但我最初的回应中的一些要点仍然有效。 例如,绕过一个OutOfMemoryException,而不需要caching纹理到光盘等。

如果我了解更多,我会继续更新这个答案。

这一切都取决于你需要实现的游戏types。

考虑到你正在要求一个canvas实现,我想你是指一个纯2D的精灵游戏。

如果精灵数量不多,数量很低,事实是,你可能会注意到一个很大的差异(考虑到许多基本的2Dgraphics游戏使用canvas)。

如果性能很重要,或者你有很多精灵,那么实现一个基于OpenGL的系统是值得的。

考虑到使用OpenGL,您将受益于GPU专用硬件,以便您的CPU将免除graphics渲染的负担。

而且,与使用混合,照明,后期处理效果的canvas实施相比,您将获得更多的灵活性。 你可以做什么真的没有限制。

一个简单的例子就是使用OpenGL等3D引擎的旋转和缩放非常便宜,并且提供了极好的结果。

canvas必须真正采用简单的实现。

PS如果你使用OpenGL ES 2.0和可编程pipe道,你实际上没有任何限制(发光,模糊和数千个不同的选项)。 在这种情况下,极限真的是我们的幻想。

🙂

如果你打算做这么大的游戏,你一定要考虑使用AndEngine: http ://www.andengine.org/

如果使用正确,这是一个很大的帮助。 可悲的是,代码中没有文档。 但网站上的论坛是相当好的。 甚至在这里关于AndEngine出现越来越多的问题。 幸运的是,有很多很好的例子可以帮助你入门。

AndEngine使用OpenGL,因此您不必在canvas上绘制可能较低的帧速率。

查看示例应用程序: https : //market.android.com/details?id=org.anddev.andengine.examples