Android OpenGL deltaTime Measure问题

时间:2012-09-03 00:55:15

标签: android opengl-es

我正在测量deltaTime:

deltaTime = (System.nanoTime()-startTime) / 1000000000.0f;
            startTime = System.nanoTime();

但我总是得到不同的浮动值,因为我的游戏是口吃的。那可能是什么问题?

09-03 03:51:59.219: D/a(21807): 0.017184043
09-03 03:51:59.234: D/a(21807): 0.016405167
09-03 03:51:59.249: D/a(21807): 0.018071748
09-03 03:51:59.269: D/a(21807): 0.015293334
09-03 03:51:59.284: D/a(21807): 0.016080335
09-03 03:51:59.299: D/a(21807): 0.018669458
09-03 03:51:59.314: D/a(21807): 0.014720625
09-03 03:51:59.334: D/a(21807): 0.01605596
09-03 03:51:59.349: D/a(21807): 0.017086169

3 个答案:

答案 0 :(得分:0)

如果您每帧执行此代码,则表示这是渲染1帧所需的时间。

您应该根据( x distance per second ) * deltaTime进行计算,这样您就可以根据每秒的帧数获得平滑的动画。

答案 1 :(得分:0)

这是来自“Beginning Android Games”的伪代码片段:

float lastFrameTime = currentTime();
while(!userQuit()) {
    float deltaTime = currentTime() – lastFrameTime;
    lastFrameTime = currentTime();
    currentScreen.updateState(input, deltaTime);
    currentScreen.present(graphics, audio, deltaTime);
}

不确定这是否会有所帮助...

答案 2 :(得分:0)

开始Android游戏不是一本好书。

如果您在每帧测量增量,则每次计算将使用不同的值。这会产生非常糟糕的结果,包括抛射物运动和非平凡的物理学。为了获得最佳结果,将delta固定为合理的值(即1/60),并使线程在所有绘图结束时等待,如果从开始起小于1/60。