Kompartementalisasi seperti-MVC dalam game? [Tutup]

19

Saya sedang merenungkan desain sebuah game (menerjemahkan boardgame ke komputer, khususnya, yang menurut saya relevan dalam kasus ini) dan terlintas dalam benak saya bahwa mungkin membangun 'permainan' terpisah dari 'tampilan'.

Itu akan memungkinkan saya untuk membuat prototipe sesuatu dengan cepat dengan antarmuka teks sederhana, dan kemudian cukup melakukannya nanti. Itu juga akan membuat saya port game ke media lain lebih mudah.

Apakah kompartementalisasi semacam ini biasa dalam permainan? Haruskah saya mencoba memecah hal-hal lebih lanjut? Apakah ada komplikasi yang mungkin saya lewatkan?

Asmor
sumber

Jawaban:

7

Board game adalah contoh bagus dari game yang dapat dibuat menggunakan MVC, karena logika game (model) memang ada cukup independen dari visual (tampilan). Namun, jika Anda mempertimbangkan game aksi seperti Gears of War, geometri model 3D intrinsik dengan logika game, jadi memisahkan pandangan seolah-olah dipertukarkan menjadi tidak ada gunanya. Unity3D adalah contoh yang bagus dari cara pengorganisasian kode yang lebih spesifik game. Anda memiliki kelas entitas dasar yang Anda tambahkan fungsionalitasnya dengan komponen, di mana satu komponen dapat menangani menggambar entitas, satu menangani logika game, dll. Periksa posting blog terkenal ini tentang subjek:

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

http://gameprogrammingpatterns.com/component.html

Iain
sumber
MVC dapat bekerja dengan baik untuk FPS, lihat gamasutra.com/features/20050414/rouwe_01.shtml untuk setidaknya satu referensi.
stonemetal
3
"... geometri dari model 3D adalah intrinsik dari logika permainan ..." Dengan demikian geometri menjadi data model utama sehingga dapat dimanipulasi oleh pengontrol (dalam hal ini, itu mempengaruhi fisika, sehingga ia ada dengan semua fisika lain parameter) untuk tujuan logika game. Jika kebetulan juga digunakan untuk tampilan, seperti dalam kasus ini, maka yang dianggap sebagai sekunder, karena simulasi sebenarnya adalah pengontrol yang mempengaruhi model; pandangan itu tidak relevan. (Beberapa berdebat tentang apakah data konfigurasi harus ada dalam model; terserah Anda, tetapi prinsipnya tetap sama). Ini adalah pendekatan yang murni.
Insinyur
5

Pandangan saya:

  • The Model adalah di mana sebagian besar data kebohongan dan semua logika berlangsung.
    Bunyinya antrian acara masukan, dan memodifikasi kondisi permainan sesuai.
    Kemudian memproses hal-hal seperti fisika dan komponen inti lainnya yang juga memperbarui status permainan.
    Loop. Itu saja.
    Tujuannya adalah untuk membuat model independen: tidak memiliki ketergantungan pada tampilan atau hal-hal pengontrol: Anda harus dapat membuat program yang hanya menjalankan model.
  • The pandangan hanya membaca keadaan permainan model, memperbarui komponen sendiri didedikasikan untuk representasi data, dan tampilan hal-hal di layar.
    Itu tidak pernah menulis apa pun pada model, ini adalah proses read-only, kecuali mungkin pendaftaran beberapa event handler (seperti "Hey Mister Model, ketika Anda mendeteksi tabrakan antara dua objek, silakan hubungi event handler saya yang memainkan suara! ").
  • The kontroler menangkap peristiwa input dan melewati mereka ke antrian masukan model. Bunyinya tampilan (apakah klik tombol ini terjadi pada tombol UI?).

Dengan begitu Anda bisa mencolokkan pengontrol palsu yang membaca file yang berisi peristiwa input pra-rekaman.
Juga buat tampilan sederhana yang hanya mencatat sesuatu pada file.
Sangat berguna untuk pengujian dan debugging.

Ingat untuk membuat pembaruan model pada kecepatan konstan (langkah waktu tetap), dan tampilan dan pengontrol secepat mungkin (tetapi tidak terlalu banyak variabel).

Splo
sumber
0

Kompartementalisasi semacam itu adalah pemisahan antara Engine dan gamecode, dan cukup umum. Ada banyak ruang untuk abstraksi di sepanjang jalan.

Mesin Anda dan data grafis spesifik gim Anda dapat berupa View, gamecode Anda Model, dan controller akan menjadi lem apa pun yang Anda gunakan untuk memberi tahu engine Anda tekstur mana yang harus diterapkan pada entitas mana dalam gamecode Anda.

Ziplin
sumber
2
Ini sama sekali tidak benar. MVC mendefinisikan pemisahan keadaan (model) dari antarmuka pengguna (tampilan dan pengontrol). "Mesin" adalah kerangka kerja umum tempat game dapat dibangun, dan dapat berisi elemen dasar untuk model, tampilan, dan pengontrol.
MikeWyatt