Saya memiliki beberapa buku tentang Pola Desain, dan telah membaca beberapa artikel, tetapi tidak dapat secara intuitif mengetahui pola desain pemrograman mana yang akan berguna dalam pengembangan game.
Sebagai contoh, saya memiliki buku berjudul ActionScript 3 dengan Pola Desain yang merinci beberapa pola desain seperti Pengendali Tampilan Model, Singleton, Pabrik, Perintah, dll.
Sebagai seseorang yang baru dalam hal ini, saya tidak dapat menemukan yang mana di antara ini akan berguna, atau bahkan jika salah satu dari ini adalah pola desain yang harus saya pelajari dan coba gunakan. Mungkin ada pola desain lain yang lebih khusus untuk pemrograman-pemrograman-game yang tidak saya sadari?
Jika Anda memiliki pengalaman menggunakan pola desain tertentu dalam pengembangan game, saya ingin mendengarnya. Alasan mengapa itu digunakan, contoh kode, atau sumber daya online semua akan sangat membantu juga jika Anda memilikinya. Saya saat ini paling tertarik dengan implementasi ActionScript 3 dan C ++, tetapi pasti dapat mengambil manfaat dari pengalaman dan contoh-contoh dari bahasa apa pun.
Terima kasih!
Jawaban:
Sekarang untuk tanggapan yang kurang sopan, dengan beberapa saran. Jangan menganggap ini sebagai rekomendasi implementasi, lebih sebagai contoh kemungkinan penggunaan.
Beberapa pola ditinggalkan karena kurangnya inspirasi.
sumber
Saya menulis buku tentang topik itu: Pola Pemrograman Game . Bab-bab yang ada di sana mungkin bermanfaat bagi Anda.
sumber
Satu hal yang Brandon Eich punya akal sehat untuk dibesarkan dalam Coders at Work adalah bahwa pola adalah peretasan dan penyelesaian masalah: [Pola] menunjukkan semacam cacat dalam bahasa. Pola-pola ini tidak gratis. Tidak ada makan siang gratis. Jadi kita harus mencari evolusi dalam bahasa yang menambahkan bit yang tepat.
Sebagai programmer game daripada desainer kompiler, kami jarang mendapatkan opsi untuk mengembangkan bahasa yang kami gunakan, tetapi kami dapat belajar untuk mengembangkan gaya kami sendiri agar lebih sesuai dengan bahasa dan persyaratan kami. Pola adalah beberapa di antaranya, tetapi tidak menggunakan pola adalah bagian lain, terutama karena seperti yang dikatakan Brandon, pola jarang berjalan tanpa kinerja yang menonjol atau memori atau biaya kelincahan kode. MVC bukan pola yang bagus untuk banyak hal dalam game. Singleton adalah solusi untuk aturan inisialisasi statis C ++ lumpuh, dan Anda mungkin tidak boleh melakukan itu pula. Factory menyederhanakan pembuatan objek yang rumit - mungkin objek Anda seharusnya lebih sederhana untuk memulai. Pola yang populer adalah alat untuk digunakan ketika kita membutuhkannya untuk mengelola sesuatu yang kompleks, bukan alat yang harus kita rindukan untuk membangun sesuatu yang rumit pada awalnya.
Kode (permainan) yang bagus mungkin menggunakan pola, atau mungkin juga tidak. Jika memang menggunakan pola, baik - mereka adalah alat komunikasi yang bagus untuk menjelaskan struktur kode ke programmer lain di tingkat tinggi, bahasa-independen. Jika Anda berpikir kode lebih baik tanpa menggunakan pola, jangan menyalahkan diri Anda sendiri - mungkin itu.
sumber
Tentu saja, seperti yang dikatakan orang lain, semua pola berguna dalam keadaan yang tepat, dan bagian dari belajar bagaimana menggunakannya adalah belajar kapan menggunakannya. Namun, buku yang luar biasa Inti Teknik dan Algoritma dalam Pemrograman Game oleh Daniel Sanchez-Crespo Dalmau, daftar enam pola pemrograman dan enam pola kegunaan yang sangat berguna dalam pemrograman game.
Pemrograman:
Kegunaan:
Buku itu, tentu saja, menjelaskan lebih rinci tentang masing-masing dari ini.
sumber
Sistem entitas adalah jenis pola yang bagus. Ini bukan pola desain karena itu bukan OOP. Namun Anda dapat mencampurnya dengan OOP.
Beberapa tautan bagus (mulai dari atas untuk intro):
sumber
OOP design patterns
yang biasanya menunjukkan hubungan dan interaksi antara kelas / objek. Dan ada banyak pola desain lainnya. OOP adalah seperangkat konsep, bukan pola yang sesungguhnya.Design pattern
adalah sebuah konsep juga.Mereka semua. Kecuali Singleton. [/kesembronoan]
sumber
Tidak benar-benar tentang pola, tetapi tentang prinsip-prinsip dasar di belakangnya. Dalam "Pola Desain: Elemen Reusable Object-Oriented Software" (1995) , geng empat (Gamma, Erich; Richard Helm, Ralph Johnson, dan John Vlissides) merekomendasikan hanya dua prinsip untuk desain berorientasi objek: (1) program untuk antarmuka dan bukan untuk implementasi dan (2) mendukung komposisi objek daripada warisan kelas.
2 prinsip ini sangat membantu dalam banyak tugas pengembangan game. Sebagai contoh, banyak programmer game telah menggunakan hierarki kelas yang dalam untuk mewakili entitas game. Ada pendekatan lain berdasarkan komposisi - objek permainan berbasis komponen. Artikel tentang pendekatan ini. Lebih banyak tautan . Ini adalah contoh pola dekorator .
sumber
The Pola Template anehnya berulang dapat benar-benar berguna untuk menghindari metode virtual dan hukuman kinerja yang dapat berasal dari panggilan fungsi virtual.
Ini bisa menjadi pola yang tepat ketika Anda tidak benar-benar perlu memiliki wadah tipe kelas dasar yang memiliki antarmuka yang Anda cari, tetapi Anda ingin memiliki perilaku dan antarmuka yang sama bernama.
Sebagai contoh, Anda dapat menggunakan ini ketika mengkompilasi kelas untuk beberapa platform atau mesin (dx vs opengl) di mana varian jenis diketahui pada waktu kompilasi.
sumber
Sebuah pola desain yang saya kembangkan selama bertahun-tahun, dan yang telah sangat berguna bagi saya, adalah sesuatu yang saya sebut sebagai "set definisi yang ditengahi"; bagaimana meringkasnya dalam istilah GOF tampaknya kontroversial, tetapi pertanyaan ini saya tulis tentang hal itu di StackOverflow masuk ke beberapa detail tentang hal itu.
Konsep inti adalah bahwa beberapa properti model, seperti spesies makhluk, diatur sehingga setiap nilai yang mungkin untuk properti memiliki objek definisi yang sesuai - satu objek bersama per nilai - yang menentukan perilakunya, dan ini diakses melalui broker pusat (yang, GOF-bijaksana, mungkin merupakan Registry, Pabrik, atau keduanya). Dalam penggunaan saya, mereka juga umumnya diakses melalui kunci skalar, untuk memfasilitasi pengikatan yang lemah untuk keperluan morfisme runtime.
sumber