我是Android游戏的开发者。
我创建了一个GLSurfaceView并在OnDrawFrame中绘制了一些内容(GL10 gl) 如下所示
void OnDrawFrame(GL10 gl)
{
frame_limit_wait();
game_logic();
draw_game();
}
一切都很好,但是开始很奇怪,当绘制n帧(在GC_EXPLICIT /暂停92ms时发生)会导致游戏暂停,在appplication中它没关系,但不是在流畅的游戏中。
原创游戏我使用SurfaceView和Thread更新工作顺利。
如果在'system.gc()'之类的draw_game()下添加一行似乎有效,但我觉得有点慢。 与另一个游戏引擎相比,我的游戏运行缓慢。
如何解决延迟问题?
编辑:我已经解决了这个问题。 只需初始化本机Float Buffer一次,并使用put和position(0)修改Buffer内容。
答案 0 :(得分:3)
垃圾收集器正在运行并占用您的框架。我建议仔细查看在函数frame_limit_wait(),game_logic()和draw_game()中执行的代码,并尽一切可能阻止初始化新对象。
最常见的技术包括:
如果仍然无效,那么您可以尝试将某些处理卸载到单独的线程或考虑使用NDK并编写本机代码。使用C ++,您根本不必担心GC。但是,这两种方法都会使代码复杂化。
答案 1 :(得分:0)
尝试在单独的线程中运行game_logic(),draw_game()代码,这样当它在frame_limit_wait()中等待时,可以更好地为GC提供服务。
我的意思是代替使用主线程尝试在单独的线程中运行渲染/更新代码。