sei*_*pey 21 android frame-rate canvas opengl-es
我要为Android编写游戏,我必须在Canvas或OpenGL之间进行选择以进行绘制.我已经读过Canvas没有很好的帧速率,但有什么好处?想象一下,你打算写一个愤怒的小鸟类游戏,Canvas帧速率是否足够?
Twi*_*led 49
我最初使用Canvas编写游戏但由于以下原因需要切换到OpenGL:
使用Canvas,你的精灵存储在堆上(除非你专门将它们缓存到磁盘上),这限制了精灵资产的总大小,具体取决于手机 - 不好!我在手机上发现这个大约是42mb - 请注意这是未压缩的位图大小.如果您有多种类型的实体,每种实体都有不同的动画,那么您可以非常快速地达到此大小.
OpenGL将您的精灵资源分别存储到堆中,这大大增加了可用内存.
画布不能很好地扩展.您调用的.draw(...)调用越多,运行速度就越慢.这种关系是相当线性的.
使用OpenGL,您可以将绘制调用一起批处理以提高性能.
从OpenGL开始这可能是令人生畏的,这使得Canvas看起来很吸引人.但是根据经验,我希望我刚开始使用OpenGL.如果你正在制作游戏,我的建议是"咬紧牙关"并使用OpenGL.
为了让事情变得更容易,我已经编写了一些有用的实用程序类,可以为您完成所有实用的OpenGL.它们允许您进行类似于使用Canvas时的简单.draw(..)调用.以下视频教程应该可以帮助您入门:
http://www.youtube.com/watch?v=xc93rN2CGNw
编辑:03/04/13
似乎随着更新的Android设备和操作系统问世,Google已经提高了Canvas的性能.我在上面描述的实用程序类的用户在做了一些基准测试后回复了我的以下电子邮件:
每帧在画布上的随机位置绘制500个精灵.
以下是结果:华为Honor(姜饼,单核1.4 Ghz):SpriteBatcher:19-20 FPS,Canvas:23-24 FPS
Nexus 7(JellyBean,4核1.3 Ghz):SpriteBatcher:29-30 FPS,Canvas:57-58 FPS
现在,在我对这个用户的回复中,我解释说这可能与我编写实用程序类SpriteBatcher的方式效率低下有关.然而,根据我自己使用Canvas回来运行Froyo 2.2的HTC Desire的经验,我可以说它对于精灵来说绝对是更慢的精灵!
在以后的操作系统和设备上,它可能已经超过效率,但我原始响应中的一些点仍然有效.例如,绕过命中OutOfMemoryException而不必诉诸于将光盘缓存到光盘上等.
如果我了解更多,我会继续更新此答案.
如果你要做这么大的游戏,你绝对应该考虑使用 AndEngine:http ://www.andengine.org/
如果使用得当,会有很大的帮助。遗憾的是代码中没有文档。但网站上的论坛还是不错的。甚至在这里也出现了越来越多关于 AndEngine 的问题。幸运的是,有很多很好的例子可以帮助您入门。
AndEngine 使用 OpenGL - 因此您在画布上绘图时不必担心可能较低的帧速率。
查看示例应用程序:https://market.android.com/details?id =org.anddev.andengine.examples
归档时间: |
|
查看次数: |
22194 次 |
最近记录: |