2012-02-05 80 views
1

我正在使用SurfaceView和画布绘制UI,在Android中开发纸牌游戏。使用SurfaceView在Android平板电脑上的性能下降

我试图优化一切尽可能的,但我仍然有两个问题:

  • 在游戏过程中,我需要画40位图(40卡在意大利甲板)在我自定义的SurfaceView的onCreate方法上创建所有位图(将它们存储在数组中),还是根据需要创建它们(例如,每次用户获取新卡时)都更好?

  • 我可以在老式三星I5500(528 MHz,QVGA屏幕)上获得超过90 fps,Optimus Life(800 MHz和HVGA屏幕)60 fps,以及Nexus One /摩托罗拉Razr(1 GHz和双核1GHz,WVGA和qHD屏幕),但当我在Android平板电脑上运行游戏(摩托罗拉Xoom双核1 GHz和1 GB Ram)时,我只能获得30/40 fps ...有可能,一个528 MHz的CPU与256 MB的RAM可以处理90 + FPS和双核心处理器不能处理60 FPS?我没有看到任何形式的GC调用运行时的....

编辑:只是为了澄清我都试过ARGB_888和RGB_565没有表现任何改变......

任何建议? 感谢

回答

0

几点供大家思考:

  1. 建议不要你的游戏运行时创建新的对象,否则,你可能会得到意外的垃圾收集。

  2. 您的FPS数字听起来不太好,您可能有测量错误,但我的猜测是您调整图像的大小以适应屏幕大小,并影响游戏的内存使用并可能导致渲染时间变慢平板电脑上。

  3. 可以使用的分析工具,以确认:TraceView

  4. 的OpenGL会更快

  5. 最后一个技巧:不要画重叠的卡,如果你可以,只绘制可见的。

好运

0
  1. 好了,所以,最好在onCreate方法来创建位图,这是我在做什么现在...

  2. 他们都OK,我相信在某些设备上的60 fps只是生产商的一些限制,因为你不会发现获得超过60 fps的任何优势(我正在做这个假设,因为它不会改变渲染1张卡,10张卡或没有卡片... OnDraw方法每秒调用60次,但是如果我添加例如50/100卡相应下降)我没有调整任何卡的大小,因为我为每个设备使用了正确的文件夹(mdpi,hdpi,ecc),并且我获得了图像的确切大小,而无需调整其大小。

  3. 我想看看它,但是从我的理解应用程序执行的所有的时间都用来绘制位图,而不是调整或在这里更新它的位置,它是:

enter image description here

  • 我知道,但它会增加复杂性的发展,我相信,使用7张画布在屏幕上应该就好...。

  • 我不画甲板上的每卡..根据需要:)

  • 更新我只是交换位图:我试图在Xoom的2运行游戏,Galaxy Tab的7加上和华硕变压器总理和60 fps运行得很好......。它可能只是Tegra 2设备的问题吗?