0

我正在用 Libgdx 写一个小游戏。

我有一个不断调用所有对象的 Render[OpenGL] 线程和一个不断调用render()所有对象的更新线程update(double delta)

更新线程的循环速度更快。我应该尝试使用某种同步,以便更新线程可以休息一下吗?会有什么好处吗?

更新

public void run() {
    while(true){
        nano = System.nanoTime();
        long delta = nano - timestamp;
        timestamp = nano;
        accumulator+=(double)delta/BILION;
        while(accumulator >= step){
            update(step);
            accumulator-=step;
        }
        long loc = (long) ((step -accumulator)*1000)+1;
        try {
            Thread.sleep(loc);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

我不知道它是否有问题,但我当前的更新是 2500-20000 fps。所以更新速度绰绰有余。

4

2 回答 2

1

不要为更新逻辑使用单独的线程,没有理由这样做。

为什么你的更新方法每秒执行 5000 次,但渲染上限为 60?这是对资源的巨大浪费。

你的渲染方法的第一行应该调用你的更新方法。

用于Gdx.graphics.getDeltaTime()获取时差。您可以通过Math.max(1 / 30f, Gdx.graphics.getDeltaTime(). 这将强制最小更新时间为 30fps。

于 2012-04-22T16:16:17.600 回答
0

您的数据更新和您的渲染应该是独立的而不是synchronized.

您的更新功能应该以您认为对用户最友好的速度运行。

它应该独立于渲染,因为渲染速率可能会因最终用户使用的硬件而改变。例如,您不希望您的“怪物”在上一代平板电脑上走得快十倍,这样它就会变得无法播放。

您应该将更新速率设置为您选择的常数。如果帧速率真的很慢,那么也许您会希望您的更新速率放慢一点。

这是我的看法,希望对您有所帮助。

于 2012-04-18T14:10:56.797 回答