0

我正在将我的游戏从 iOS 移植到 Android。大多数情况下,它工作得很好。我主要使用 C/C++ 代码、NDK/JNI 和一点 Java 来管理应用程序生命周期并将触摸和加速度计信息发送到我的游戏。

据我所知,有 2 个线程,主 UI 线程和一个由 GLSurfaceView 创建的线程,用于处理显示和翻转 OpenGL 后台缓冲区等。

因此,除了触摸之外,一切都运行良好。与我在设备上尝试过的其他应用程序相比,它们感觉迟缓且反应迟钝。在做了一些研究之后,我相信这个问题可能与我如何使用线程有关。具体来说,我认为,这可能与显示线程在工作后不休眠有关,因此,它在主 UI 线程上进行了处理。这听起来合理吗?

我尝试计算我需要多少毫秒 GLSurfaceView 显示线程休眠,然后休眠(),它改善了触摸,但我的设备上的动画不再是恒定的 60FPS。我的怀疑是我正在计算前一帧休眠的毫秒数,并使用该数字休眠当前帧。

或者,它可能是完全不同的东西?我不知道。我对Android还是很陌生...

希望有人能对此事有所了解,或指出我正确的方向。

谢谢,

4

1 回答 1

0

您不必休眠 GL 线程。事实上,我会说休眠 GL 线程会使它更加迟缓,因为它是在屏幕上渲染图像的东西。

缓慢的 UI 主要是由于主 UI 线程被阻塞造成的。如果您在主线程上进行大量处理(例如加速度计数据),则主线程必须先完成工作,然后再处理您的用户输入。这会给人一种呆滞的“感觉”。所有触摸事件和非 opengl 绘图事件都必须发生在 UI 线程中。其他任何事情都可能发生在后台线程中,不会长时间阻塞 UI 线程。

除此之外,另一种可能性是您只是使处理器过载。您的 GL 线程可能需要很长时间才能绘制。它可能正在接收和处理触摸事件和加速度计数据。但是,如果渲染需要很长时间,那么您将看到过时的数据。因此,它再次感到“呆滞”。您提到它不是恒定的 60 FPS,所以这是一个非常现实的可能性。您可能已经优化了绘图代码,因此渲染速度更快。

于 2012-09-05T13:56:56.773 回答