Saya telah mendengar bahwa Anda dapat menghitung waktu delta dengan dua fungsi yang disebut SDL_GetPerformanceCounter dan SDL_GetPerformanceFrequency. Saya tidak yakin bagaimana mereka bekerja sepenuhnya, tapi saya dengar ini sedikit mirip dengan menggunakan SDL_GetTicks ()
Uint64 NOW, LAST;
double deltaTime = 0;
while (somebool)
{
LAST = SDL_GetPerformanceCounter();
NOW = SDL_GetPerformanceCounter();
LAST = NOW;
deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency();
/**Rendering**/
}
Saya memiliki kode ini tetapi setiap kali saya mencetak deltaTime atau mencoba menggunakannya selalu sama dengan beberapa angka yang benar-benar acak dan gila. Apakah ini benar?
Jawaban:
Ketika membaca kode-contoh yang disediakan oleh SDL pada SDL_GetPerformanceFrequency saya dapat dengan mudah mengetahui bagaimana Anda bisa menghitung deltatime menggunakan fungsi-fungsi ini.
Ini pada dasarnya harus turun untuk ini untuk Anda:
Catatan: frame pertama akan selalu memiliki deltatime 0 atau sesuatu yang sangat dekat dengannya
Ini harus mengisi nilai deltaTime dalam milidetik, ini dapat dengan mudah dikonversi menjadi detik dengan mengalikan hasil akhir dengan 0,001.
Referensi: https://wiki.libsdl.org/SDL_GetPerformanceFrequency
sumber
deltaTime = ((NOW - LAST)*1000 / (double)SDL_GetPerformanceFrequency() );
karena ini menghindari penjepitan nomor karena pembagian bilangan bulat.Mereka cara saya sudah pergi tentang menghitung waktu delta telah melalui
SDL_GetTicks()
:Maka saya cukup mencentang sebuah
Clock
instance di loop utama.sumber