Android游戏循环:绘制/更新策略(API 16 +)

时间:2016-07-06 13:20:39

标签: android performance graphics hardware-acceleration game-loop

我正在研究Android 2D游戏(+自己的简单引擎),并尝试找出安排绘图/更新机制(API 16+)的最佳方法,以使我的游戏动作流畅。

我使用自定义视图来使用Hardware Acceleration。 SurfaceView实现不是很有说服力。我研究了Android Graphics Architecture,它向我介绍了使用Choreographer的想法,但我不确定它是否与我的自定义视图和postInvalidate()相结合。请注意,postInvalidate()始终在UI线程上执行。

以下是我到目前为止尝试的不同方法:

  1. 更新线程(使用ellapsedTimeInMillis持续运行以进行计时)+绘制线程,每16ms调用postInvalidate()(使用Thread.sleep(restFrameTime)
  2. 更新线程(使用ellapsedTimeInMillis持续运行以进行计时)+使用处理程序和自定义视图绘制线程循环器,实现Choreographer.FrameCallback调用doFrame(),调用postInvalidate()
  3. 只有一个用于更新和绘图的线程Choreographer.FrameCallback和一个状态更新每个帧的时间信息为doFrame(long frameTimeNanos)。使用postInvalidate()进行绘图。
  4. 我很难找到最佳方法,因为性能跟踪(traceview,systrace,glTracing ......)很难理解,并且对于不同的设备和设置(例如省电模式)也非常不同。我还考虑使用postInvalidateOnAnimation(),但我认为它已经使用了Choreographer.FrameCallback

    您对该主题有何看法?对于API 16+的黄油光滑无抖动60 FPS游戏性能,你认为最好的方法是什么?我做错了吗?很难找到关于Choreographer实现的详细说明。

0 个答案:

没有答案