Apa cara terbaik untuk menghadapi situasi yang mungkin timbul, di mana pengguna memiliki dua atau lebih monitor dengan resolusi berbeda dan interval sinkronisasi vertikal?
Ini akan berlaku ketika permainan memiliki catatan waktu tetap, dan berjalan dalam mode berjendela: jika satu monitor memiliki frame rate 60.056, dan yang lainnya memiliki frame rate 59.94, sinkronisasi vertikal pada akhirnya akan gagal melakukan tugasnya, jika jendela game dipindahkan dari layar utama ke yang lain.
Aliasing sementara juga akan terjadi, karena catatan waktu tidak diselaraskan dengan benar ke laju sinkronisasi lainnya. Bagaimana gim biasanya menangani masalah ini?
n
dalam waktu kurang dariO(n)
kompleksitas (secara optimalO(1)
), maka tidak satupun dari apa yang saya katakan berlaku. Simulasi interaktif tidak cenderung bekerja seperti itu.Jawaban:
Langkah-langkah logika game tidak harus disinkronkan dengan logika tampilan, bahkan jika Anda menggunakan stempel waktu tetap.
Pertimbangkan gameloop seperti:
Tidak masalah berapa lama
draw()
panggilan Anda . Selama Andado_step()
kurang dari itutime_per_step
, logika gim Anda tidak akan ketinggalan.sumber
X
frame logika per detik padaY
frame grafis per detik, untukX != Y
, Anda harus membuat logika keep to graphics (bingkai berulang dan terjatuh) atau grafik keep logic (merobek). Alternatif lainnya adalah force logic untuk dijalankan pada kecepatan grafik, yang akan mengarah pada aliasing sementara. Tidak ada ilmu roket di sini.