Saya membaca satu buku bagus, Game Coding Complete , dan buku itu sangat merekomendasikan menggunakan pendekatan MVC (Model-View-Controller) , dengan tiga lapisan utama:
- Lapisan Aplikasi Game
- Logika Game
- Tampilan Game
Bagi saya, pendekatan ini terlihat seperti kerja keras untuk permainan komputer seluler.
Apa pendapat Anda? Apakah layak menerapkan arsitektur ini, bahkan jika itu menambahkan komunikasi tambahan yang diperlukan antara modul? Bisakah desain ini menghabiskan begitu banyak daya CPU, sehingga pada akhirnya, hasilnya akan jauh lebih lambat, daripada jika tidak diimplementasikan?
architecture
Bunkai.Satori
sumber
sumber
Jawaban:
Saya agak mendukung menggunakan struktur MVC bahkan untuk gim seluler sederhana. Jika tidak ada yang lain, ini membantu dengan masalah yang mengganggu pengembang yang belum cukup digigit olehnya: memisahkan kode tampilan dari logika game.
Saya juga akan mengatakan, perlu diingat bahwa MVC, seperti semua pola desain, ada untuk membuat hidup Anda lebih mudah . Itu berarti bahwa jika, pada waktu tertentu, tetap berada dalam seperangkat aturan tentang apa yang harus dan tidak harus Anda lakukan ketika menggunakan MVC membuat hidup Anda lebih sulit, abaikan saja . Satu dari dua hal akan terjadi: 1) Anda akan digigit kemudian, dan kemudian akan mengerti mengapa melakukannya secara berbeda sebenarnya akan membuat hidup Anda lebih mudah dalam jangka panjang, atau 2) tidak ada konsekuensi apa pun.
Pemrograman komputer, berdasarkan sifatnya, mendapat banyak pengikut aturan yang menghargai kepatuhan terhadap prinsip elegan daripada benar-benar mencapai apa pun, dan mereka suka mengemukakan sistem nilai mereka; jangan biarkan mereka menjadikan Anda salah satu dari mereka. Hal terpenting yang dapat terjadi pada gim Anda adalah mengirimkannya .
sumber
Desain waktu kompilasi tidak mengkonsumsi daya CPU, kecuali jika Anda memiliki kompiler yang sangat buruk. Bahasa berorientasi objek atau pendekatan tidak berbeda dalam karakteristik kinerja daripada yang prosedural. Anda tidak akan meminta overhead tambahan untuk menggunakan MVC. Modularitas ada pada waktu kompilasi, bukan run-time, setelah kode diuraikan dan dioptimalkan, itu tidak akan membuat perbedaan sama sekali.
Banyak game modern benar-benar menjalankan model dan pandangan pada utas terpisah dan mendapatkan manfaat kinerja yang luar biasa pada kebanyakan platform.
Pada akhirnya, MVC adalah desain yang bagus yang membuat Anda meningkatkan pemeliharaan dan mengurangi bug dll secara gratis . Tidak ada alasan untuk tidak menggunakannya. Ini seperti bertanya mengapa Anda harus menggunakan
for
loop daripada tulisan tangangoto
. Kecuali Anda memiliki desain yang unggul dalam pikiran, itu pasti lebih baik daripada tidak sama sekali.Sunting: Desain waktu kompilasi tidak mengkonsumsi daya CPU. Desain run-time seperti pewarisan jelas dilakukan.
sumber
Hampir selalu ada tradeoff antara kejelasan kode dan persyaratan teknis (kecepatan, memori, dll.) Dari program. Bahasa berorientasi objek memiliki overhead dibandingkan dengan bahasa prosedural, tetapi mereka telah terbukti memiliki banyak keunggulan dibandingkan bahasa prosedural, terutama dalam pemeliharaan jangka panjang kode (bug, dll.) Dan sering kali kecepatan pengembangan juga.
Maka dengan itu dalam pikiran, saya mengusulkan bahwa MVC layak diterapkan untuk kepentingan Anda sebagai programmer game . Kode Anda akan lebih baik mengikuti prinsip-prinsip berorientasi objek, terutama enkapsulasi , dan Anda mungkin akan memiliki waktu yang lebih mudah untuk mempertahankannya (memperbaiki bug atau menambahkan fitur baru).
Di sisi lain, pastikan untuk benar-benar menyelesaikan permainan dan tidak menghabiskan banyak waktu bekerja pada "mesin" yang tidak pernah selesai.
Untuk info lebih lanjut, silakan baca pertanyaan "Mengapa MVC & TDD tidak dipekerjakan lebih banyak dalam arsitektur game?" dan jawaban saya yang sangat panjang.
sumber
a++
akan sama persis sepertia++
di C (di manaa
adalah tipe primitif, dll.). Tetapi pertimbangkan kelas C ++ sederhana dengan fungsi virtual yang melakukan sesuatu, fungsi virtual itu menimbulkan overhead yang lumayan vs fungsi C sederhana, bahkan jika kode bagian dalamnya identik. Bahasa berorientasi objek memiliki overhead . Maaf karena secara eksplisit mengatakan "kecepatan". Jika alokasi memori tambahan dan semacamnya tidak menghasilkan program yang lebih lambat maka Anda benar sekali.