LibGDX安卓系统:尽管使用了TimeKeeping,但仍有25个以上的精灵滞后



问题我有"颗粒"的ArrayList。我推了大约25个,它们都弹了起来。然而,由于某些原因,它们似乎运行得更快,而render()较慢/需要更多时间(wut?)请帮助我使其以恒定的速度平滑地滑动。当屏幕上只有5个精灵时,它也会抖动

尝试过这个东西:

  • 阅读周围的SO。他们推荐getDeltaTime
  • Gdx.graphics.getDeltaTime()乘以pelletSpeed(无更改)
  • 在当前的代码中,颗粒跳跃、颠簸、不一致地溅射,几乎是不可预测的。我假设它在引擎盖下以恒定速度运行,但老实说,很难说

对于渲染中的循环:

String currentDir = pelletList.get(i).getDir();
String currentColor = pelletList.get(i).getColor6();
pelletSpeedElapsedTime = TimeUtils.nanoTime();
if(currentDir.equals("Up")) {
    pelletList.get(i).y -= pelletSpeed * TimeUtils.timeSinceNanos(pelletSpeedElapsedTime);
    if(pelletList.get(i).y < 0 ) {
        pelletList.get(i).setDir("Down");
    }
} else if (currentDir.equals("Down")) {
    pelletList.get(i).y += pelletSpeed * TimeUtils.timeSinceNanos(pelletSpeedElapsedTime);
    if(pelletList.get(i).y > screenHeight) {
        pelletList.get(i).setDir("Up");
    }
} else if (currentDir.equals("Left")) {
    pelletList.get(i).x -= pelletSpeed * TimeUtils.timeSinceNanos(pelletSpeedElapsedTime);
    if(pelletList.get(i).x < 0) {
        pelletList.get(i).setDir("Right");
    }
} else if (currentDir.equals("Right")) {
    pelletList.get(i).x += pelletSpeed * TimeUtils.timeSinceNanos(pelletSpeedElapsedTime);
    if(pelletList.get(i).x > screenWidth) {
        pelletList.get(i).setDir("Left");
    }
}

感谢

pelletSpeedElapsedTime = TimeUtils.nanoTime();在我看来很可疑——你得到了这个时间,然后立即计算子弹的经过时间。到那时几乎没有时间了,在下一次调用这是什么方法之前,你根本不会考虑经过的时间

我认为(猜测您的代码的其余部分是什么样子的)您希望将pelletSpeedElapsedTime赋值移动到此方法的末尾。这里的想法是,你想捕捉完成此更新的时间,这样下次更新时你就知道更新之间经过了多少时间(例如,渲染、睡眠等时间)

这样做意味着你必须处理pelletSpeedElapsedTime还没有初始化的情况(也许在构造函数中初始化它?再次,不确定更广泛的上下文。)此外,我不认为所有这些TimeUtils.timeSinceNanos调用都是必要的——我会在这段代码的开头调用一次,并使用该值(以确保移动的实体都获得一致的时间增量,并避免冗余的调用/计算)

最新更新