Menghasilkan animasi yang halus dengan C# di berbagai sistem komputer dapat menjadi tugas yang menantang. Namun ada metode sederhana untuk menyesuaikan perilaku program dengan jumlah target frame per detik.
Menganimasikan objek dengan C# dapat memiliki arti yang berbeda-beda.
Yang pertama adalah menganimasikan rangkaian gambar seperti GIF animasi. Dalam hal ini sudah ada beberapa dukungan di .Net Framework, tapi mungkin Anda ingin menangani gambar berdasarkan frame-by-frame.
Bentuk animasi lainnya adalah dengan gambar yang dihasilkan kode. GDI%2B dapat menggambar beberapa grafik yang sangat kompleks dan menganimasikannya dengan lancar dapat memberikan dimensi kualitas ekstra pada aplikasi .Net Anda.
Terakhir terkadang programmer ingin menganimasikan perilaku Window Form, seperti ukuran, posisi, teks, dll. Meskipun ini adalah properti objek, kami ingin properti tersebut berubah dalam interval teratur, berapa pun kecepatan CPU komputer.
Langkah pertama untuk menulis animasi FPS konstan di C# adalah memutuskan cara mengukur siklus CPU. Objek yang paling umum digunakan untuk mengukur waktu adalah objek Timer dan kelas DateTime. Meskipun keduanya mudah digunakan, akurasinya kurang. Sebagai gantinya, kita akan menggunakan kelas System.Diagonistics.StopWatch.
Kelas StopWatch menggunakan panggilan API QueryPerformanceTimer untuk melacak siklus CPU, yang lebih akurat. Akurasi yang lebih besar dalam hal ini berarti animasi yang lebih konstan.
Pada dasarnya Anda ingin melacak tiga nilai, dua di antaranya akan terus berubah:
- Interval = Stopwatch.Frekuensi / [target FPS (30.0 for example)]
- currentTicks = Stopwatch.GetTimestamp()
- lastTicks = sama dengan currentTicks tetapi diambil terakhir kali animasi digambar
Logika dibalik algoritma C# tidak terlalu rumit. Singkatnya, sebuah loop akan terus berjalan, tetapi Anda hanya ingin animasi dijalankan/disegarkan ketika jumlah siklus CPU terakhir dan jumlah siklus saat ini setidaknya memiliki selisih Interval yang Anda hitung sebelumnya. Baru setelah itu animasinya disegarkan.
Hasilnya adalah animasi yang konstan tidak peduli seberapa cepat komputer. Cukup sesuaikan FPS di sistem Anda dan itu akan menjadi kecepatan yang dirasakan di seluruh sistem.
Alasan ini berhasil adalah karena animasi tidak dijalankan dalam loop while/for yang sederhana tanpa berpikir panjang. Perulangan ini menggunakan siklus CPU komputer host untuk menyesuaikan interval penyegaran animasi.