Saya memperbarui jawaban saya karena banyak hal yang tidak jelas sebelum komentar. Tolong telanjang dengan saya saat saya menjelaskan pikiran saya.
Secara umum, dua aspek utama untuk dipertimbangkan dalam desain apa pun adalah kohesi dan kopling . Kita semua tahu bahwa kita membutuhkan kohesi yang tinggi dan kopling yang rendah untuk dapat membuat desain yang lebih dapat digunakan kembali dan diperluas.
Jadi, jika dunia harus mengatur segalanya, itu berarti ia memiliki kohesi yang rendah dan kopling yang ketat (karena itu perlu mengetahui dan melakukan segalanya). Namun, ini juga merupakan kasus ketika entitas game harus melakukan segalanya. Perbarui lokasinya, render teksturnya, dll. Dll
Apa yang benar-benar Anda minati adalah menciptakan sistem yang fokus pada satu aspek entitas. Misalnya, entitas game dapat memiliki Tekstur, tetapi Renderer akan bertanggung jawab untuk membuat tekstur itu di layar. Renderer tidak peduli dengan properti lain yang dimiliki entitas.
Mengambil sedikit lebih jauh, entitas permainan hanyalah sekumpulan properti. Properti ini dimanipulasi oleh sistem yang berfokus pada properti tertentu. Dan ini adalah tempat Sistem Entitas Berbasis Komponen (CBES) masuk, di mana properti = komponen.
Secara khusus, CBES dengan Sistem (atau SubSistem). Desain ini cenderung memiliki beberapa Sistem yang berfokus pada komponen spesifik suatu entitas sementara tidak peduli tentang apa komponen lain yang dimiliki entitas. Juga, Sistem hanya digabungkan dengan informasi yang mereka butuhkan untuk memproses komponen-komponen ini.
Mari kita ambil contoh. Karena input tempat untuk memindahkan entitas didasarkan pada pengontrol pemain, Anda mungkin akan memiliki PlayerControllerSystem. Sistem ini, akan mengendalikan, terlepas dari banyak hal lain, PositionComponent entitas. Dalam hal ini, PlayerControllerSystem perlu mengetahui tentang Level dan PositionComponent. Jika nanti Anda memutuskan untuk menambahkan deteksi tabrakan, Anda akan membuat CollisionSystem yang akan lagi menggunakan posisi entitas, tetapi kali ini untuk menghitung kotak pembatas (atau Anda bisa memiliki BoundingBoxComponent, panggilan Anda). Faktanya adalah, Anda dapat dengan mudah mengaktifkan atau menonaktifkan perilaku (bahkan dengan cepat) hanya dengan menambahkan / menghapus komponen. Jadi, lebih banyak perilaku berarti lebih banyak sistem memanipulasi komponen suatu entitas, tetapi mereka semua berada dalam kelas yang didefinisikan dengan baik dengan kopling rendah. Ingin membuat skrip? Tambahkan ScriptComponent. BAM! Anda baru saja menambahkan kemampuan scripting dengan 2 kelas. Fisika? Suara? Sama lagi.
Jadi, alasan saya mengadvokasi CBES dengan SubSystems adalah bahwa itu adalah OO yang sempurna dan keseluruhan sistem yang mudah dikelola / diperluas. Menambahkan perilaku ke suatu entitas sesederhana memutuskan data apa yang dibutuhkan perilaku dan entitas mana yang membutuhkannya.
Untuk informasi lebih lanjut tentang Sistem Entitas berbasis Komponen dengan SubSistem, ada serangkaian posting blog yang sangat baik oleh T = Machine di Entity Systems adalah masa depan pengembangan MMOG . Penulis bahkan membuat wiki untuk mengumpulkan berbagai implementasi bernama Entity Systems Project
Pos umum (dan terkenal) tentang Sistem Entitas Berbasis Komponen secara umum adalah Evolve hierarki Anda yang menciptakan sistem untuk Tony Hawk Pro.
Akhirnya, jika Anda mencari perpustakaan dengan kode contoh, jangan melangkah lebih jauh dari perpustakaan Artemis . Artemis terutama di Jawa tetapi di sini adalah port di C # (yang saat ini saya gunakan dalam proyek XNA saya).
Actor
tahuworld
sama sekali?