Saya menghasilkan uang dalam bahasa C # Umumnya dalam bahasa itu saya suka memisahkan segala sesuatu ke langit tinggi menggunakan antarmuka. Ini telah membantu saya dengan baik dalam kode perusahaan tetapi dalam menulis game di C # Saya mendapati diri saya cenderung ke warisan karena mampu mendefinisikan beberapa perilaku default untuk kelas dasar. Saya merasa kotor melakukan ini, seperti saya tidak menaati beberapa dewa arsitektur yang pernah berkata "mendukung komposisi daripada warisan". Saya tahu ini bukan hitam dan putih tetapi saya juga merasa seperti saya bisa menggunakan antarmuka dengan sedikit lebih banyak pekerjaan dan mencapai hal yang hampir sama.
Apa yang dilakukan orang lain? Apakah pewarisan pendekatan yang tepat untuk game atau haruskah saya refactor di beberapa antarmuka?
sumber
Jawaban:
Warisan dalam permainan sebenarnya adalah salah satu hal terburuk yang dapat Anda lakukan - khususnya dalam hal entitas. Baca ini untuk alasannya. Komposisi atas warisan membawa Anda jauh dengan permainan. Sedangkan untuk area lain dari mesin Anda, itu tidak terlalu penting. Katakan misalnya Anda membuat panggilan ke beberapa jenis layanan jaringan eksternal, maka Anda dapat mewarisi satu jenis layanan generik ke misalnya. HTTPService dan SocketService - sangat banyak seperti di aplikasi perusahaan yang biasa Anda gunakan.
Kecuali gim Anda benar-benar sederhana, Anda akan ingin menggunakan arsitektur entitas berbasis komponen (CBE). Gagasan umum adalah bahwa dengan entitas, alasan mereka begitu umum dikomposisikan daripada diwariskan adalah karena Anda tidak dapat mengetahui sampai runtime kemampuan apa yang akan dimiliki entitas tertentu. Misalnya, ambil kapal pemain dalam penembak ruang. Anda tidak tahu sampai titik tertentu selama permainan, apa senjata, baju besi, sistem (yaitu komponen) yang pemain akan ambil, beli, jual, kalah, hancurkan, dll. Jadi satu-satunya cara realistis untuk memodelkan ini adalah melalui komposisi objek. Sisi positifnya dalam skenario ini adalah Anda juga dapat memiliki musuh yang sepenuhnya dapat disesuaikan, dibangun dengan cara yang sama, daripada musuh yang selalu sama persis setiap kali Anda melihat tipe musuh itu. Jadi dengan CBE, Anda mungkin melihat Freighter Mars dan berpikir, "Ah itu hanya memiliki laser kecil, saya akan menurunkannya", dan biasanya itu benar tetapi ketika Anda berada dalam jangkauan tiba-tiba Anda menyadari bahwa ia memiliki pantat besar senjata lubang cacing. Kejutan kejutan!
Componentisation menghapus kopling logika implisit, dan itu BAIK.
sumber
Bagi mereka yang berbicara bahasa Jerman buku yang menarik: http://www.amazon.com/Architektur-Kerns-einer-Game-Engine-Implementierung/dp/3639324471/ref=sr_1_1?ie=UTF8&qid=1314875533&sr=8-1
Pandangan lebih dekat tentang kapan dan mengapa menggunakan arsitektur mana yang dapat ditemukan di sini: /programming/1901251/component-based-game-engine-design
Untuk diri saya, saya memutuskan arsitektur saya tergantung pada ukuran proyek dan kemungkinan untuk memperpanjang atau menggunakan kembali kode. Mengapa berinvestasi berjam-jam ke dalam arsitektur proyek mikro di mana tidak ada peluang Anda menggunakan kode lagi? Pada saat yang sama Anda dapat menyelesaikan proyek.
Komposisi vs Komponen Komponen adalah barang mewah yang keren, tetapi di sebagian besar proyek / komposisi arsitektur akan mengerjakannya juga (tanpa overhead berbasis komponen). Itu tergantung apa yang dapat diberikan oleh komponen-sistem Anda yang komposisi tidak bisa.
semua itu mungkin tanpa komponen sejak dulu juga
sumber