Libgdx: getRawDeltaTime() harus mengembalikan 0 saat setContinuousRendering() diubah dari false menjadi true

Dibuat pada 28 Des 2013  ·  3Komentar  ·  Sumber: libgdx/libgdx

Di sebagian besar backend, tidak ada cara untuk mereset detlaTime... Hal ini menyebabkan ketidakmungkinan untuk beralih dari non-continous rendering ke continuous rendering saat animasi diperlukan (khususnya saat menganimasikan menu di scene2d.ui). Misalnya, saat mengatur animasi seperti ini:

final TextButton button = new TextButton("New Game", textButtonStyle);
button.addListener(new ClickListener() {
    public void clicked(InputEvent event, float x, float y) {
        Gdx.app.debug("TestApplication", "button clicked");
        MoveToAction outAction = Actions.action(MoveToAction.class);
        outAction.setPosition(0, 0);
        outAction.setDuration(.5f);
        outAction.setInterpolation(Interpolation.pow2Out);
        button.addAction(Actions.sequence(outAction, Actions.run(new Runnable() {
            <strong i="6">@Override</strong>
            public void run() {
                Gdx.graphics.setContinuousRendering(false);
                Gdx.graphics.requestRendering();
            }
        })));
        Gdx.graphics.setContinuousRendering(true);
    }
});

Ketika tombol ditekan dalam non-continous rendering, tampilan diperbarui tetapi jika acara naik mengarah ke acara klik 1 detik setelah acara turun, getDeltaTime() lebih besar dari durasi animasi ... jadi atur rendering berkelanjutan ke true tidak memiliki efek dan animasi selesai segera.

Saya ingin memiliki cara untuk mengatur deltaTime ke nol saat mengubah ke rendering berkelanjutan sehingga bingkai _new_ pertama cocok dengan bingkai pertama animasi (dan bukan yang terakhir):

  • dengan metode setContinousRendering() dari setiap backend
  • dengan setDeltaTime() dan setRawDeltaTime() baru

Saya melakukannya dengan introspeksi yang sebenarnya bukan cara yang baik tetapi menghemat banyak masa pakai baterai dan menjaga animasi.

Bagaimana menurutmu ?

Komentar yang paling membantu

Anda dapat (dan harus) membatasi waktu delta ke nilai maksimum.

Lihat cara melakukannya di https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

Semua 3 komentar

Anda dapat (dan harus) membatasi waktu delta ke nilai maksimum.

Lihat cara melakukannya di https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

Itu solusi yang bagus!

Coba ini
waktu maksimum=0.2f
delta = delta > maxTime ? waktu maks: delta ;
melompati maksimal 5 frame jika Anda mendapatkan 30fps (terendah yang diizinkan untuk gerakan halus)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat