0

私はLibgdxで小さなゲームを書いています。

すべてのオブジェクトを呼び出し続けるRender[OpenGL]スレッドとrender()、すべてのオブジェクトを呼び出し続けるUpdateスレッドが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〜20000fpsです。したがって、更新速度は十分すぎるほどです。

4

2 に答える 2

1

更新ロジックに別のスレッドを使用しないでください。理由はありません。

update メソッドを 1 秒間に 5000 回実行するのに、レンダリングが 60 回に制限されているのはなぜですか? それは資源の大量の浪費です。

render メソッドの最初の行で update メソッドを呼び出す必要があります。

Gdx.graphics.getDeltaTime()時差を取得するために使用します。古い/動きの鈍い携帯電話のぎくしゃくした動きをトレードオフして、更新をスムーズにすることができますMath.max(1 / 30f, Gdx.graphics.getDeltaTime()。これにより、最小更新時間が 30fps に強制されます。

于 2012-04-22T16:16:17.600 に答える
0

データの更新とレンダリングは独立している必要があり、ではありませんsynchronized

更新機能は、ユーザーにとって最もユーザーフレンドリーであると判断した速度で機能する必要があります。

エンドユーザーが使用するハードウェアによってレンダリングレートが変わる可能性があるため、レンダリングから独立している必要があります。たとえば、「モンスター」が前世代のタブレットで10倍速く歩くことを望まないため、再生できなくなります。

更新レートは、選択した定数に設定する必要があります。次に、フレームレートが本当に遅い場合は、更新レートを少し遅くしたい場合があります。

それがお役に立てば幸いです。

于 2012-04-18T14:10:56.797 に答える