安卓开发:2D游戏是用OpenGl还是android.graphics?

29

我和我的朋友合作开发我们的第一个Android游戏。基本想法是,在游戏的每一帧中,整个表面都会重新绘制(1个大位图),分为两步:

  1. 使用某些静态图像(PNG)的背景擦除上一帧
  2. 然后将其撒满大量粒子,产生肥皂泡沫效果,其中有约20个位图池会随机被选中以产生所有不同的气泡(在200-300之间)。每帧更新气泡位置(~50毫秒),产生移动气泡的效果。

数学引擎采用C语言(JNI),目前所有绘图都使用android.graphics包完成,非常类似(因为这是我使用的示例)Lunar Lander。 它能够工作,但动画有些卡顿,并且我可以感觉到我的手机温度很高,它非常忙碌。我们切换到OpenGL会受益吗?并且还有一个奖励问题:我们现在如何优化绘图机制(类似Lunar Lander)?

2个回答

6

现在我已经开始使用OpenGL ES,我也会用它来实现2D图形。这种方式非常灵活,而且速度极快(可以看看这个示例代码,它是关于2D渲染的,你可以看到OpenGL的强大之处。

虽然不是最容易入门的技术,但是有一些很好的教程可以参考。例如,这个就是一个非常好的教程。


看起来jayway的教程侧重于3D绘图,除非我弄错了。 - o0'.
基本的初始化工作对于2D和3D是相同的,如果你想使用OpenGL,你必须先了解它;) 有一些GL11(一个特殊的OpenGL ES接口,不是所有设备都可用)方法,你不需要设置视角等等,但大部分的东西对于2D和3D都很重要。 - Simon
1
嗨,我正在开发Android 2D游戏,并使用Canvas绘制图形。但是它很慢,我认为使用OpenGL会更快。所以我尝试了你建议的测试应用程序,但结果与你的不同。Canvas方法总是比OpenGL方法快。这很奇怪。你说OpenGL很快。你知道问题可能出在哪里吗?以下是我在LG Optimus One上进行测试并启用动画的结果:Canvas:58毫秒(17.2413 fps)OpenGL ES: 基本顶点四边形:104毫秒(9.615 fps) 绘制纹理扩展:73毫秒(14.02 fps) VBO扩展:74毫秒(13.51 fps) - branoholy
可能他们重新设计了画布绘制方法,这个测试已经不是最新的了;) 但你也应该考虑到在旧手机上,比如安卓1.6,OpenGL会更快。有一些非常好的2D游戏框架,例如libgdx。也许可以看看它们,毕竟移动精灵并不是你唯一需要做的事情;) - Simon

3
不要每次都重新绘制整个屏幕,这会导致帧率下降。使用invalidate方法标记每一帧更新的区域即可。

1
我猜这就是对于奖励问题的答案。 - tomsv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接