[Mem-posting ulang pertanyaan ini dari stackoverflow, seperti yang ditunjukkan lebih cocok di sini.]
Saya saat ini porting mesin gim 2D saya ke Jawa. Saya melihat beberapa perpustakaan permainan yang ditunjukkan di sini di stackoverflow. Namun, yang saya lihat agak sederhana dan bahkan tidak menyatakan jika mereka mendukung hal-hal seperti transparansi alpha, jadi saya memutuskan untuk port render C ++ saya yang sudah saya tuliskan logikanya.
Renderer ini adalah renderer perangkat lunak murni yang menggunakan ubin untuk menghindari rendering ulang yang tidak perlu. Saya mengoptimalkan kinerja penggulirannya dengan membuat "buffer layar" yang sedikit lebih besar dari panel output saya, dan menyaring buffer layar ini ke output saya di setiap frame. Dengan cara ini, saya bisa menghindari menggambar ubin dengan sia-sia hanya karena saya menggulir piksel pada peta.
Saya menggunakan AWT Java untuk mengimplementasikannya, menggunakan BufferedImage besar untuk buffer offscreen. Penggunaan CPU baik-baik saja (sekitar dua kali lipat dari yang saya miliki di C ++), tetapi ada masalah aneh dengan pengguliran terus-menerus, di mana setiap detik atau lebih, renderer akan tertinggal sekitar 0,2 detik.
Karena tidak ada apa pun dalam kode saya yang akan terjadi pada periode ini, dan karena lonjakan hilang jika saya tidak menarik buffer layar saya ke tampilan utama, saya hanya dapat menyimpulkan bahwa Java melakukan beberapa optimasi internal sendiri. Namun, saya tidak yakin apa fungsinya, saya juga tidak tahu mana dari optimasi saya sendiri yang harus saya hapus untuk menyingkirkan paku. Juga, mungkin java AWT tidak dibuat dengan pengguliran FPS yang berkelanjutan dan tinggi, dan itu sama sekali tidak dapat digunakan untuk tujuan ini.
Apakah ada cara bagi saya untuk menyingkirkan paku ini?