Yah, saya tahu bahwa posting ini cukup lama, tetapi saya tidak bisa menolak.
Saya baru-baru ini membangun mesin game. Ini menggunakan perpustakaan pesta 3d untuk rendering dan fisika, tapi saya menulis bagian inti, yang mendefinisikan dan memproses entitas dan logika permainan.
Mesinnya pasti mengikuti pendekatan tradisional. Ada loop pembaruan utama yang memanggil fungsi pembaruan untuk semua entitas. Tabrakan secara langsung dilaporkan melalui panggilan balik pada entitas. Komunikasi antar entitas dibuat menggunakan smart pointer yang dipertukarkan antar entitas.
Ada sistem pesan primitif, Yang memproses hanya sekelompok kecil entitas untuk mesin pesan. Pesan-pesan itu lebih disukai diproses pada akhir interaksi game (contohnya adalah pembuatan entitas atau penghancuran) karena mereka dapat mengacaukan dengan daftar pembaruan. Jadi, di akhir setiap loop game, daftar kecil pesan dikonsumsi.
Meskipun sistem pesan primitif, saya akan mengatakan bahwa sistem ini sebagian besar "pembaruan berbasis loop".
Baik. Setelah menggunakan sistem ini, saya pikir itu sangat sederhana, cepat dan terorganisir dengan baik. Logika permainan terlihat dan mandiri di dalam entitas, tidak dinamis seperti pesan quewe. Saya benar-benar tidak ingin menjadikannya event driven karena menurut saya sistem acara memperkenalkan kompleksitas yang tidak perlu pada logika game, dan membuat kode game sangat sulit untuk dipahami dan didebug.
Tapi, saya juga berpikir bahwa sistem "update loop based" murni seperti milik saya punya beberapa masalah juga.
Misalnya, Dalam beberapa saat, satu entitas mungkin berada pada "keadaan tidak melakukan apa-apa", mungkin sedang menunggu pemain mendekat atau yang lainnya. Dalam sebagian besar kasus, entitas membakar waktu prosesor dengan sia-sia dan lebih baik mematikan entitas, dan menyalakannya saat peristiwa tertentu terjadi.
Jadi, di mesin gim berikutnya, saya akan mengadopsi pendekatan yang berbeda. Entitas akan mendaftarkan diri untuk operasi mesin, seperti pembaruan, gambar, deteksi tabrakan dan sebagainya. Setiap peristiwa ini akan memiliki daftar antarmuka entitas yang terpisah untuk entitas yang sebenarnya.