Oyunlarda MVC benzeri bölümlendirme? [kapalı]


19

Bir oyunun tasarımını tasarlıyordum (özellikle bu durumda alakalı olduğunu düşündüğüm bir masa oyununu bilgisayara çevirmek) ve 'oyun'u' ekrandan ayrı olarak inşa etmenin mantıklı olabileceği aklıma geldi.

Basit bir metin arayüzü ile bir şeyi hızlı bir şekilde prototiplememe ve daha sonra güzelleşmeme izin verir. Ayrıca oyunu diğer medyalara daha kolay bir şekilde aktarmama izin verir.

Bu tür bölümlendirme oyunlarda yaygın mıdır? İşleri daha fazla yıkmaya çalışmalı mıyım? Eksik olabileceğim komplikasyonlar var mı?

Yanıtlar:


7

Bir masa oyunu, oyun mantığı (model) görsellerden oldukça bağımsız olduğu için MVC kullanılarak yapılabilecek oyunun iyi bir örneğidir (görünüm). Bununla birlikte, Gears of War gibi bir aksiyon oyunu düşünürseniz, 3D modellerin geometrisi oyun mantığına özgüdür, bu nedenle görünümü birbirinin yerine kullanılabilir gibi ayırmak anlamsız hale gelir. Unity3D, kodu düzenlemenin daha oyuna özgü bir yolunun harika bir örneğidir. Bileşenlerle işlevsellik eklediğiniz bir temel varlık sınıfınız var, burada bir bileşen varlığın çizimini, bir tutamaç oyun mantığını vb. Ele alabilir.

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

http://gameprogrammingpatterns.com/component.html


MVC, FPS'ler için iyi çalışabilir En az bir referans için bkz. Gamasutra.com/features/20050414/rouwe_01.shtml .
stonemetal

3
"... 3B modellerin geometrisi oyun mantığına özgüdür ..." Böylece geometri, kontrolör tarafından manipüle edilecek şekilde öncelikle model verilere dönüşür (bu durumda fiziği etkiler, bu nedenle diğer tüm fiziklerle birlikte mevcuttur) parametreleri). Bu durumda olduğu gibi görünüm için de kullanılırsa, gerçek simülasyon modeli etkileyen denetleyici olduğundan, bu ikincil olarak kabul edilir; görüş alakasız. (Yapılandırma verilerinin modelde var olup olmayacağı konusunda bazı tartışmalar vardır; size kalmış, ancak prensip aynı kalır). Bu saf bir yaklaşımdır.
Mühendis

5

Benim almam:

  • Modeli nerede çoğu veri yatıyor ve tüm mantık gerçekleşir.
    Bir girdi olayları kuyruğunu okur ve oyun durumunu buna göre değiştirir.
    Daha sonra oyun durumunu da güncelleyen fizik ve diğer temel bileşenler gibi şeyleri işler.
    Döngü. Bu kadar.
    Amaç modeli bağımsız hale getirmektir: görünüm veya denetleyici öğelerine bağımlılığı yoktur: sadece model çalıştıran bir program yapabilmeniz gerekir.
  • Görünümü basitçe, modelin oyun durumunu okur ekranda kendi verilerinin temsil adanmış bileşenleri ve ekran şeyler günceller.
    Model üzerinde hiçbir şey yazmaz, salt okunur bir işlemdir, belki bazı olay işleyicilerin kaydı ("Hey Bay Model gibi, bu iki nesne arasında bir çarpışma tespit ettiğinizde, lütfen ses çalan olay işleyicimi arayın! ").
  • Kontrol giriş olayları yakalar ve modelin giriş sıra iletir. Görünümü okur (bu düğme tıklaması UI düğmesinde mi meydana geldi?).

Bu şekilde, önceden kaydedilmiş giriş olayları içeren bir dosyayı okuyan sahte bir denetleyici takabilirsiniz.
Ayrıca, bir dosyada yalnızca günlükleri kaydeden basit bir görünüm oluşturun.
Test ve hata ayıklama için çok kullanışlıdır.

Model güncellemesini sabit bir hızda (sabit zaman adımı) ve görünümü ve denetleyiciyi mümkün olduğunca hızlı (ancak çok fazla değişken değil) yapmayı unutmayın.


0

Bu tür bölümlendirme, bir Motor ve oyun kodu arasındaki bölünmedir ve oldukça yaygındır. Yol boyunca soyutlama için bolca yer var.

Motorunuz ve oyunlarınıza özgü grafik verileri Görünüm, oyun kodunuz Model ve denetleyici gibi olabilir, motorunuza oyun kodunuzdaki hangi varlığa uygulanacak dokuyu söylemek için kullandığınız yapıştırıcı olabilir.


2
Bu hiç de doğru değil. MVC, durumun (modelin) kullanıcı arabiriminden (görünüm ve denetleyici) ayrılmasını tanımlar. "Motor", oyunların üzerine inşa edilebileceği genel bir çerçevedir ve model, görünüm ve denetleyici için temel öğeleri içerebilir.
MikeWyatt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.