Yang paling sukses mesin permainan kompetitif seperti id Tech
, GoldSrc
, Source
dan seperti memungkinkan untuk keterbatasan framerate.
Anda dapat bermain dengan 30, dengan 60, dengan 99, dengan 72, dengan 68 dll. Singkatnya, Anda dapat menutupnya dan mengontrol tutupnya.
Saya bertanya-tanya, bagaimana saya membatasi framerate?
Bukan tertarik pada kode, tapi teori.
frame-rate
joltmode
sumber
sumber
Jawaban:
Teorinya adalah: Periksa kapan terakhir kali Anda membuat bingkai, dan jika belum waktunya untuk menggambar bingkai lain, maka jangan, dan tunggu sampai tiba.
sumber
Katakanlah Anda ingin membatasi framerate Anda menjadi 60fps, itu berarti bahwa setiap frame memiliki waktu render 1 / 60s = 16,67ms (bulat)
Untuk membatasi frame rate Anda, Anda cukup mengecek waktu di awal loop game Anda, kemudian Anda dapat membandingkannya dengan waktu di akhir loop game: jika selisihnya kurang dari 16,67 ms Anda harus mengulur waktu itu.
Salah satu cara untuk melakukan ini adalah dengan menggunakan:
Namun karena
sleep(x)
menghasilkan utas untuk minimumx
milidetik Anda tidak tahu pasti apakah Anda akan mendapatkan kontrol kembali dalam waktu.Cara yang lebih baik adalah menggunakan:
Ini menghasilkan utas dan meminta kontrol kembali sesegera mungkin.
Solusi lain adalah dengan hanya memiliki loop menunggu sibuk, ini memberi Anda kontrol terbaik tetapi menggunakan CPU tidak perlu.
Ingat bahwa penjadwal OS selalu dapat mengambil kendali dari utas Anda jadi bersiaplah untuk beberapa fluktuasi.
sumber