Menghasilkan animasi yang halus dengan C# di berbagai sistem komputer dapat menjadi tugas yang menantang. Namun ada metode sederhana untuk menyesuaikan perilaku program ke jumlah target frame per detik.
Menganimasikan objek dengan C# dapat berarti beberapa hal yang berbeda.
Pertama akan menganimasikan urutan gambar gambar seperti GIF animasi. Dalam hal ini sudah ada beberapa dukungan yang ada di .Net Framework, tetapi mungkin Anda ingin menangani menggambar secara frame-by-frame.
Bentuk lain dari animasi adalah dengan gambar yang dihasilkan kode. GDI%2B dapat menggambar beberapa grafik yang sangat kompleks dan menganimasikannya dengan lancar dapat membawa dimensi kualitas ekstra ke aplikasi .Net Anda.
Terakhir, terkadang programmer ingin menganimasikan perilaku Window Form, seperti ukuran, posisi, teks, dll. Meskipun ini adalah properti objek, kami ingin mereka mengubahnya dalam interval reguler, tidak peduli berapa kecepatan CPU komputer.
Langkah pertama untuk menulis animasi FPS konstan dalam C# adalah memutuskan cara untuk mengukur siklus CPU. Objek yang paling umum digunakan untuk mengukur waktu adalah objek Timer dan kelas DateTime. Meskipun keduanya mudah digunakan, mereka kurang akurat. 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 di balik algoritma C# tidak terlalu rumit. Singkatnya, sebuah loop akan terus berjalan, tetapi Anda hanya ingin animasi dijalankan/direfresh ketika jumlah siklus CPU terakhir dan jumlah siklus saat ini memiliki setidaknya celah dari Interval yang Anda hitung sebelumnya. Kemudian dan baru kemudian animasi disegarkan.
Hasilnya adalah animasi konstan tidak peduli seberapa cepat komputer. Cukup sesuaikan FPS di sistem Anda sendiri dan itu akan menjadi kecepatan yang dirasakan di seluruh sistem.
Alasan kerjanya adalah karena animasi tidak berjalan pada loop while/for sederhana tanpa otak. Loop menggunakan siklus CPU komputer host untuk menyesuaikan interval animasi di-refresh.