Saya memiliki tikus yang melihat dan berjalan dalam permainan saya, tetapi mereka sangat lambat dan sulit digunakan. Saya pikir itu karena saya menggunakan kecepatan tetap. Saya mendengar bahwa dalam proyek besar pengembang menggunakan waktu delta. Bagaimana cara menghitung waktu delta dalam kekenyangan? Bagaimana cara menghitung kecepatan menggunakan waktu delta?
14
Jawaban:
"Waktu delta" dulunya adalah waktu yang berlalu antara dua pembaruan bingkai (tetapi juga dapat digunakan dalam konteks lain; ini biasanya merupakan hasil dari pengurangan waktu).
Anda bisa mendapatkan waktu delta dalam kekenyangan menggunakan metode glutGet dan parameter GLUT_ELAPSED_TIME, ditambah beberapa operasi.
Baris berikut mengembalikan jumlah milidetik sejak glutInit dipanggil (atau panggilan pertama ke glutGet (GLUT_ELAPSED_TIME)):
Jadi, jika Anda mendaftarkan timeSinceStart saat ini di setiap loop rendering, Anda dapat mengetahui deltaTime dengan mengurangi yang lama ke yang baru.
Anda juga dapat melakukannya dengan cara yang hampir sama, menggunakan C / C ++ ctime library dengan clock () dan ekspresi konstan makro CLOCKS_PER_SEC yang menentukan hubungan antara centang jam dan detik.
Pada dasarnya, Anda dapat menggunakan deltaTime untuk memperbarui gerakan Anda sesuai dengan waktu yang telah berlalu ini daripada menggunakan nilai waktu tetap. Dengan cara ini, kecepatan gerakan karakter Anda harus hampir sama jika program Anda berjalan pada 60 fps atau jika berjalan pada 10 fps.
Ini adalah contoh kecil: misalkan Anda ingin memindahkan sesuatu sebanyak 10 unit setiap detik pada sumbu x. Anda dapat melakukan sesuatu seperti ini (jika deltaTime memang menggunakan milidetik).
Dengan cara ini, apakah program Anda diperbarui 2 kali atau 100 kali, 1 detik kemudian posisinya harus hampir sama, dan permainan-nya kurang terpengaruh oleh fps rendah komputer kecil daripada jika menggunakan nilai tetap.
Dengan nilai tetap ==> fps rendah = kurang pembaruan = gerakan lambat sedangkan fps tinggi = lebih banyak pembaruan = gerakan sangat cepat.
Dengan deltaTime == "" hampir "gerakan yang sama.
Terakhir, Anda harus membaca Langkah waktu tetap vs Langkah waktu variabel di gamedev.stackexchange.
sumber
positive int
biasanya naik menjadi 2.147.483.647 jika ditandatangani dan hingga 4.294.967.295 jika tidak ditandatangani ... jadi meskipun kita anggap lebih kecil, 2.147.483.647 milidetik hampir 25 hari ... Itu seharusnya cukup untuk menangani sebagian besar permainan timer dan bahkan jika itu tidak cukup kita masih dapat menggunakanunsigned int
(~ 50 hari) atau bahkanlong long
(seperti yang biasanya saya lakukan).QueryPerformanceCounter
di Windows dangettimeofday
pada sebagian besar lainnya. Anda harus membuat tangan Anda kotor dan bertujuan untuk sedikit lebih banyak daripada penyebut API platform yang paling tidak umum, terutama di C dan C ++.