【问题标题】:Jerky sprite (2d) movement with OpenGL ES 2.0 on Android在 Android 上使用 OpenGL ES 2.0 进行生涩的精灵 (2d) 运动
【发布时间】:2013-04-06 16:49:18
【问题描述】:

编辑 2. 添加 logcat 的截图。如果我将精灵的数量减少到 1,我仍然会得到这种间歇性的“停止/启动” - 所以我不认为这是我的代码,因为使用 1 个精灵,我的帧速率徘徊在 85-90 fps 左右。我猜这是电话上的东西,logcat 记录了很多东西,所以我假设很多东西在后台运行。有什么方法可以让我的应用在运行时优先于其他服务?

编辑 1. 请查看问题末尾的编辑详情

我创建了一个精灵测试,我在其中渲染了大约 290 个精灵。

1 个精灵的每秒帧数约为 80,而 288 帧仍为 30 左右,问题是精灵时不时地停止和启动,这显然不是帧速率,所以有人知道什么可能是这个原因? (要明确的是,它不是放慢速度,而是平稳运动一段时间,然后一切都停止了几分之一秒,然后又恢复平稳)。

这也发生在屏幕上的一个精灵上 - 但只是间歇性地,每 5 秒左右 - 我添加的精灵越多,它发生的越多,但帧速率永远不会低于 30 fps,(我理解应该可以顺利移动),所以我只是想了解这可能是什么。

我的精灵是从一个自定义类创建的,但只创建了 3 个实际对象(背景,一个在屏幕上移动的精灵(这样我可以测量平滑度),然后是 288 个精灵(它们实际上是同一个对象)重复使用),它们以 6 个为一组渲染。

感谢您的帮助。

硬件是三星 Galaxy Ace 手机。

编辑好的,所以我通过批处理例程进行了更改,现在我每次调用渲染 24 个精灵(14 次调用 = 336 个四边形 + 移动精灵 + 背景 = 338 个四边形),大约 47 FPS ,所以我想知道除了 GC 或帧速率下降太多之外,还有什么可能导致这种“生涩”的运动?

【问题讨论】:

    标签: android performance memory sprite spritebatch


    【解决方案1】:

    听起来像是垃圾收集器正在运行。要验证这一点,只需查看 logcat... 生涩时刻是否与标记为“dalvikvm”并以“GC_”开头的行相关?

    【讨论】:

    • 嗨@ReubenScratton 我检查了CG,但在我的循环中它根本没有运行。很奇怪。我将更新我的问题以反映我的进一步测试。
    • 5 秒的间隔听起来仍然像 GC。确定您没有从 logcat 视图中过滤掉调试标签?
    • @RuebenScratton,logcat 过滤肯定设置正确,因为 CG 确实出现了,但绝对不是在我的主循环期间。还有其他想法吗?
    • @RuebenScratton,我一直在对此进行更多研究,但我实际上并不认为这是我的代码(不是 100% 肯定,但似乎不是)。我添加了一个屏幕截图。我的手机不断地抛出你可以在我的编辑中看到的消息——不仅仅是在我的应用程序运行时,而是一直)。知道这是什么吗?我用谷歌搜索了它,但我找不到任何东西。
    • 那些消息确实无关紧要。三星 ROM 倾向于滥用系统日志记录,使用起来很痛苦。
    猜你喜欢
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2010-12-23
    相关资源
    最近更新 更多