Apakah ada kerangka kerja berbasis komponen FOSS yang ada? [Tutup]


25

Paradigma pemrograman game berbasis komponen menjadi jauh lebih populer. Saya bertanya-tanya, apakah ada proyek di luar sana yang menawarkan kerangka kerja komponen yang dapat digunakan kembali? Dalam bahasa apa pun, kurasa aku tidak peduli tentang itu. Ini bukan untuk proyek saya sendiri, saya hanya ingin tahu.

Secara khusus yang saya maksud adalah apakah ada proyek yang menyertakan Entitykelas dasar , basisComponent , kelas , dan mungkin beberapa komponen standar? Maka akan jauh lebih mudah memulai permainan jika Anda tidak ingin menemukan kembali roda, atau mungkin Anda ingin GraphicsComponentyang melakukan sprite dengan Direct3D, tetapi Anda tahu itu sudah dilakukan puluhan kali.

Googling cepat muncul pada Rusher . Adakah yang pernah mendengar tentang ini / apakah ada yang menggunakannya? Jika tidak ada yang populer, lalu mengapa tidak? Apakah terlalu sulit untuk membuat sesuatu seperti ini dapat digunakan kembali, dan mereka membutuhkan penyesuaian yang berat? Dalam implementasi saya sendiri, saya menemukan banyak boilerplate yang bisa dimasukkan ke dalam kerangka kerja.


4
Anda harus menjadi yang pertama menulisnya! :)
Ricket

1
Yah, saya menulis satu di C # untuk proyek saya sendiri. Mungkin kita semua bisa berkontribusi?
Tesserex

Saya benar-benar siap untuk mengerjakan proyek C # itu. Ya, tidak ada konsensus besar tentang bagaimana standar harus bekerja, tapi mungkin kita bisa fokus pada XNA (apa pun yang mengapung perahu Anda). Hanya karena sekelompok raksasa belum menyatakan cara terbaik untuk melakukannya bukan berarti kami tidak dapat mencoba / bereksperimen.
Michael Coleman

Mungkin karena desain berbasis komponen lebih menarik manajer proyek daripada programmer
M. Utku ALTINKAYA

Jawaban:


45

Jika tidak ada yang populer, lalu mengapa tidak?

Karena tidak ada yang menyerupai konsensus tentang bagaimana kerangka kerja seperti itu akan beroperasi.

Di utas di Gamedev.net, saya menentukan bahwa ketika orang berbicara tentang sistem permainan berbasis komponen, sebenarnya ada setidaknya 8 kemungkinan permutasi tentang bagaimana mereka mengharapkannya untuk bekerja, berdasarkan 3 faktor berbeda:

Inboard vs. outboard - haruskah komponen digabungkan ke dalam entitas, atau haruskah mereka menjadi bagian dari subsistem dan hanya dikaitkan oleh ID entitas?

Komposisi statis vs. dinamis - jika entitas terdiri dari sekumpulan komponen yang diketahui (mis. 1 Fisika, 1 Animasi, 1 AI, dll.) Yang dapat berkomunikasi dalam kode melalui antarmuka yang terkenal, atau entitas dapat menambahkan jumlah komponen yang ditambahkan ke mereka (dengan strategi terkait untuk menemukan komponen lain yang menarik)

Data pada komponen vs data pada entitas - Haruskah data dipegang oleh komponen yang terutama beroperasi di atasnya? Atau haruskah data disimpan pada entitas dalam ruang bersama, dapat diakses oleh semua komponen?

Di luar itu ada pertanyaan lebih lanjut tentang bagaimana komponen harus berkomunikasi (melalui data bersama? Melalui fungsi pointer? Melalui sinyal / slot? Atau tidak sama sekali?), Bagaimana mereka harus memperbarui (dalam urutan tetap berdasarkan pada jenis komponen? Per -rentitas pesanan didefinisikan pada waktu pembuatan? berdasarkan semacam topologi saling ketergantungan komponen?), dll.

Masing-masing pilihan ini sepenuhnya arbitrer, dan apa pun yang dapat Anda lakukan dengan satu sistem dapat dilakukan dengan yang lain. Tetapi cara Anda harus kode itu sangat berbeda dalam setiap kasus. Dan orang-orang tampaknya memiliki pendapat yang kuat tentang cara mana yang paling cocok untuk mereka.

Saat ini orang-orang masih terjebak dalam gagasan bahwa komponen-komponen entah bagaimana merupakan pengganti orientasi objek (yang sebenarnya bukan) dan juga membayangkan bahwa mereka adalah perubahan besar dari cara permainan dibuat secara tradisional (yang lagi-lagi, mereka tidak - orang telah memperhitungkan berbagai subsistem di entitas mereka selama berabad-abad), jadi ada banyak hiperbola dan tidak banyak kesepakatan. Mungkin dalam beberapa tahun segalanya akan tenang dan orang-orang akan memilih satu atau dua pendekatan yang cukup standar.


1
Saya menghargai jawaban ini sudah tua, tetapi sekarang salah: ada kerangka kerja yang populer, dan hanya ada sedikit perdebatan tentang topik ini. Saat menulis permainan, sebagian besar pertanyaan di atas tidak masalah: apakah itu tidak berpengaruh pada desain kode, atau satu pendekatan yang cepat dan dapat digunakan kembali di mana yang lain tidak. Dalam praktiknya, ada banyak Kerangka populer - wiki yang tertaut dalam salah satu jawaban lain adalah titik awal yang baik (banyak dari kita mempertahankannya untuk mempermudah menemukan permainan + kerangka kerja yang dikirim)
Adam

1
@ Adam: Saya ingin tautan tentang perincian tentang pendekatan yang memenangkan pertandingan evolusi Darwin. ketika saya mengatakan detail, saya tidak ingin mendengar tentang inboard dan outboard, saya ingin mendengar tentang peta hash, vektor, pengalokasi, swasta, publik, loop, const ... RENDAH tingkat detail.
v.oddou

@ v.oddou seseorang sudah memposting tautan ke wiki sebagai jawaban (lihat di bawah). Anda ingin detail? Penuh dengan kode sumber .
Adam

10

Ada wiki yang mengumpulkan contoh-contoh ini:

http://entity-systems.wikidot.com/

... bersama dengan penjelasan tentang perbedaan antara pendekatan yang berbeda.


Ash dan Artemis (keduanya di wiki) memang terbukti populer, keduanya digunakan untuk pengembangan game komersial, bersama dengan hobi game dev.
Adam

4

Lihat kerangka kerja ini yang saya temukan terkait dengan arsitektur ini ...

www.burgerengine.com

Tombol TekanTombol

Arthemis Framework - https://github.com/artemis-esf/artemis-framework/tree/master/src/com/artemis

Melihat Unity Api. Anda dapat menemukan banyak hal mengenai arsitektur berbasis Komponen. (Akan memperbarui daftar segera setelah saya menemukan suatu tempat ...)

Memperbarui:

      https://code.google.com/p/spartanframework/

Ini menjelaskan tentang sistem entitas dengan cara yang baik ... http://piemaster.net/2011/07/07/entity-component-primer/


2

Ada Push Button Engine untuk Flash: http://pushbuttonengine.com/

Dan ada Panda3D untuk c ++ / python: panda3d dot com (maaf saya hanya diperbolehkan 1 url per posting sebagai n00b)

Saya yakin ada banyak lagi di luar sana :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.