Setelah mengajukan dua pertanyaan tentang sistem entitas ( 1 , 2 ), dan membaca beberapa artikel tentang mereka, saya pikir saya memahaminya jauh lebih baik daripada sebelumnya. Saya masih memiliki beberapa ketidakpastian, terutama tentang membangun emitor partikel, sistem input, dan kamera. Saya jelas masih memiliki beberapa masalah dalam memahami sistem entitas, dan mereka mungkin berlaku untuk berbagai objek, tetapi saya memilih tiga karena mereka konsep yang sangat berbeda, harus mencakup tanah yang cukup luas, dan membantu saya memahami sistem entitas dan cara menangani masalah seperti ini, saya sendiri, ketika mereka datang
Saya sedang membangun sebuah mesin dalam JavaScript, dan saya telah mengimplementasikan sebagian besar fitur inti, yang meliputi: penanganan input, sistem animasi fleksibel, penghasil partikel, kelas matematika dan fungsi, penanganan adegan, kamera dan render, dan sejumlah besar dari hal-hal lain yang biasanya didukung oleh mesin. Saya membaca jawaban Byte56, yang membuat saya tertarik membuat mesin menjadi sistem entitas. Itu masih tetap mesin game HTML5, dengan filosofi adegan dasar, tetapi harus mendukung penciptaan entitas yang dinamis dari komponen.
Masalah yang saya miliki, sekarang, adalah menyesuaikan konsep mesin lama saya ke dalam paradigma pemrograman baru ini. Ini adalah beberapa definisi dari pertanyaan sebelumnya, yang diperbarui:
Sebuah Entity adalah sebuah identifier. Itu tidak memiliki data, itu bukan objek, ini adalah id sederhana yang mewakili indeks dalam daftar adegan semua entitas (yang sebenarnya saya rencanakan untuk diimplementasikan sebagai matriks komponen).
Sebuah Komponen adalah pemegang data, tetapi dengan metode yang dapat beroperasi pada data tersebut. Contoh terbaik adalah
Vector2D
komponen, atau "Posisi". Memiliki data:x
dany
, tetapi juga beberapa metode yang membuat operasi pada data sedikit lebih mudah:add()
,normalize()
, dan sebagainya.Sebuah Sistem adalah sesuatu yang dapat beroperasi pada set entitas yang memenuhi persyaratan tertentu; biasanya entitas perlu memiliki serangkaian komponen tertentu, untuk dioperasikan. Sistem adalah bagian "logika", bagian "algoritma", semua fungsi yang disediakan oleh komponen murni untuk memudahkan pengelolaan data.
Kamera
Kamera memiliki Vector2D
properti posisi, properti rotasi, dan beberapa metode untuk memusatkannya di sekitar titik. Setiap bingkai, diumpankan ke penyaji, bersama dengan adegan, dan semua objek diterjemahkan sesuai dengan posisinya. Adegan kemudian ditampilkan.
Bagaimana saya bisa mewakili objek semacam ini dalam sistem entitas? Apakah kamera akan menjadi entitas, komponen, atau kombinasi (sesuai jawaban saya )?
Emitor Partikel
Masalah yang saya miliki dengan penghasil partikel adalah, sekali lagi, apa yang seharusnya. Saya cukup yakin bahwa partikel itu sendiri tidak harus menjadi entitas, karena saya ingin mendukung lebih dari 10.000 dari mereka, dan saya percaya bahwa menciptakan banyak entitas akan menjadi pukulan berat pada kinerja saya.
Bagaimana saya bisa mewakili objek semacam ini dalam sistem entitas?
Manajer Input
Yang terakhir yang ingin saya bicarakan adalah bagaimana input harus ditangani. Dalam versi mesin saya saat ini, ada kelas yang disebut Input
. Ini adalah penangan yang berlangganan acara browser, seperti penekanan tombol dan perubahan posisi mouse, dan juga mempertahankan keadaan internal. Kemudian, kelas pemain memiliki react()
metode, yang menerima objek input sebagai argumen. Keuntungan dari ini adalah bahwa objek input dapat diserialisasi ke .JSON, dan kemudian dibagikan melalui jaringan, memungkinkan untuk simulasi multipemain yang mulus.
Bagaimana ini diterjemahkan ke dalam sistem entitas?