gpt4 book ai didi

java - Android 游戏 GLSurfaceView 时间处理

转载 作者:行者123 更新时间:2023-12-01 11:16:51 25 4
gpt4 key购买 nike

我正在尝试使用 Java 和 OpenGL ES 2.0 制作一个小型 Android 游戏。目前,我正在尝试创建一个良好的游戏循环,以便在物体移动等情况下获得流畅的感觉。我尝试了 4 种方法,但都让我不满意。

这是我的方法:

方法 1:

@Override
public void onDrawFrame(GL10 gl)
{
game.update(1.0f / 60.0f);
game.render();
}

结果:

大约 2 秒内有一点滞后/延迟。在这 2 秒之间,感觉非常顺利。

方法 2:

@Override
public void onDrawFrame(GL10 gl)
{
newTime = System.currentTimeMillis();
delTime = newTime - oldTime;
oldTime = newTime;

game.update(delTime / 1000.0f);
game.render();
}

结果:

大约 2 秒有一点滞后/延迟,与“方法 1”完全相同。在这 2 秒之间,感觉非常顺利。

方法 3:

@Override
public void onDrawFrame(GL10 gl)
{
newTime = System.currentTimeMillis();
delTime = newTime - oldTime;
oldTime = newTime;
lagTime += delTime;

// 18ms ~ 55 Frames per second
while(lagTime >= 18)
{
game.update(18 / 1000.0f);

lagTime -= 18;
}

game.render();
}

结果:

大约 0.5 秒有一点滞后/延迟。感觉从来不顺畅。

方法 4:

@Override
public void onDrawFrame(GL10 gl)
{
newTime = System.currentTimeMillis();
delTime = newTime - oldTime;
oldTime = newTime;
lagTime += delTime;

// 18ms ~ 55 Frames per second
while(lagTime >= 18)
{
game.update(18 / 1000.0f);

lagTime -= 18;
}

// Render all linear interpolated dependent on the lag time.
game.render(lagTime / 1000.0f);
}

结果:

大约 2 秒有一点滞后/延迟,与“方法 1”和“方法 2”完全相同。在这 2 秒之间,感觉非常顺利。

摘要:

我很确定我没有分配内存,因此 GC 无法工作,但是还有什么可能导致这些延迟 2 秒?

为什么 GLSurfaceView 每秒调用“onDrawFrame”方法 60 次而无需我做(有时每秒 58 或 62 次),我认为它调用该方法的频率如此之高,而且 60 FPS 听起来不是随机的,所以是否可以指定此速率以及其在其他设备上的行为方式?

那么最后,对于一个具有快速移动物体的简单 2D 游戏来说,没有延迟 2 秒的简单方法是什么(所以 40-60 FPS 应该是最低限度)?

如果重要的话,我在装有 Android 5.1.1 的 Nexus 7(2013) 上测试了这些方法。

最佳答案

好吧,经过几天的努力解决这个问题,我找到了另一个解决方案。现在我只需取大约 5 帧的平均增量时间。这似乎效果更好,但并不完美。

关于java - Android 游戏 GLSurfaceView 时间处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31721636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com