MVC atau Komponen, atau keduanya?


9

Saya seorang pengembang yang berpengalaman tetapi baru-baru ini saya ingin masuk ke pemrograman game tetapi seperti yang Anda tahu pengembangan game adalah binatang yang sama sekali berbeda dari kebanyakan bentuk pemrograman lainnya (mungkin hanya dikalahkan oleh pengembangan sistem operasi).

Karena itu saya sudah membaca Game Coding Complete (ISBN 978-1-58450-680-5) oleh Mike McShaffry.

Awalnya saya akan mencoba mengembangkan dengan model komponen dengan bermacam-macam komponen yang biasa (misalnya SpacialComponent, VisualComponent, EntityLogicComponent, dll.) Namun Mr. McShaffry merekomendasikan menggunakan model MVC yang terlihat sangat menarik tetapi saya tidak yakin bagaimana saya dapat membuatnya bekerja dengan model komponen jika memungkinkan, tetapi, tanpa komponen, model MVC terlihat seperti monster pewarisan monolitik jahat dan tidak terlalu fleksibel, yang saya tidak terlalu tertarik.

Saya benar-benar bingung ke mana harus pergi dari titik ini.

Apakah Anda lebih berpengalaman dengan ahli pengkodean game voodoo yang memiliki pemikiran atau rekomendasi?

Terima kasih banyak!


Pertanyaan tentang StackOverflow ini berbicara tentang desain berbasis komponen, mungkin membantu Anda.
Macke

Jawaban:


6

Pertanyaan yang berguna:

Arsitektur Mesin Game MVC (Model-View-Controller) - Ya atau Tidak?

Mengapa MVC & TDD tidak dipekerjakan lebih banyak dalam arsitektur game?

Kompartementalisasi seperti-MVC dalam game?

Bagi saya, saya memiliki kelas dasar RenderComponent dan kemudian beberapa yang mewarisi dari itu (GameSprite, UISprite, atau jika Anda melakukan 3d StaticModel, DynamicModel, BillboardModel, dll.) Dan jika objek ingin dirender, objek mengirimkannya Anggota RenderComponent ke sistem render. Tidak perlu sistem render untuk mengetahui objek apa yang dikirimkan RenderComponent. Ia hanya tahu itu punya sesuatu untuk diurai dan lebih baik melakukannya, atau yang lain!

Tetap dasar dan berpusat di sekitar komposisi daripada warisan. Memisahkan logika, data, dan representasi tidak kompatibel dengan sistem komponen.


6

Saya akan merekomendasikan mengabaikan komponen untuk game pertama Anda karena mereka menyelesaikan beberapa jenis kompleksitas dengan menambahkan lebih banyak kompleksitas di area lain, dan jika Anda belum membuat game, Anda tidak tahu apakah pertukaran ini layak atau tidak.

Namun untuk sebagian besar, jangan terjebak dalam paradigma pemrograman dan hanya kode permainan. Tidak ada cara yang benar atau salah, jika tidak, tidak ada yang perlu mengajukan pertanyaan semacam ini. Kerjakan saat Anda melanjutkan.


1
+1 untuk "mereka menyelesaikan beberapa jenis kompleksitas dengan menambahkan lebih banyak kompleksitas di area lain". Jadi benar untuk hampir 99% dari "pola desain" di luar sana, atau bahkan teknologi pada umumnya.
kizzx2

2

Saya tidak akan menggunakan pola MVC yang ketat, tetapi saya akan memisahkan rendering Anda dari simulasi Anda, dan menempelkannya di thread lain.

Saya pikir komponen sebenarnya sangat berguna, tetapi saya sering melihat orang mengabaikannya dan menulis kode mereka langsung ke komponen "utama" apa pun itu. Anda harus ingat bahwa permainan penuh dengan peretasan karena sering ditulis pada tenggat waktu dengan asumsi bahwa kode tidak akan digunakan kembali.

Saya sedikit bingung mengapa Anda berpikir pendekatan ini tidak kompatibel. Apa kode permainan yang telah Anda lihat?

Secara pribadi, saya pikir game memang membutuhkan desain di muka. Saya telah melihat beberapa basis kode yang merupakan mimpi buruk karena "hanya kode mental".

Yang mengatakan, saya pikir Anda harus langsung masuk dan kode permainan. Anda akan membuat banyak kesalahan saat menulis game pertama Anda sehingga masalah seperti ini tidak akan banyak berarti. Setelah Anda memiliki pemahaman yang lebih baik tentang apa yang diperlukan, maka Anda dapat kembali dan mulai melihat arsitektur dan melihat bagaimana menyelesaikan masalah yang Anda temui.

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.