Veriye dayalı tasarım nedir? [kapalı]


11

Oyunlar için veri odaklı tasarımı kapsayan birçok makale okudum. Aşağıdakilere geliyor gibi görünüyor:

  • Sert kodlama yok
  • Motorda oyuna özgü kod yok
  • AI, cutscenes, et cetera için komut dosyaları.
  • Yeniden kullanılabilirlik için genelleme kodu
  • Bileşen tasarımı
  • Modülarite
  • Düşük bağlantı
  • Editörler (veriler, haritalar, komut dosyaları için)
  • Harici veri alımı
  • Metin dosyalarında ( .iniveya başka bir şekilde) saklanan sabitler
  • Tasarımcılar tarafından kodlama ve manipülasyon için editörler aracılığıyla verileri ortaya çıkarın

Şimdi sorum şu: Bu anlayış doğru mu?


3
Siteye hoş geldiniz. Burada iki sorunuz var (genellikle her gönderi için yalnızca bir soru sormalısınız) ve "nasıl başlanacağı" ile ilgili ikinci soru konu dışı olarak değerlendirilir, bu yüzden soruyu düzenledim ve soruyu çözümledim. Bir şeye nasıl başlayacağınız hakkında tartışmalar yapmak istiyorsanız, Oyun Geliştirme Sohbeti'ni ziyaret etmeyi düşünün .

@JoshPetrie Ama şu anda birçok sitede bulunduğum ve hiçbir cevap alamadığım için en önemlisi buydu. Bir yönde bir kurca bile. Bu konularda biraz bilgi sahibi olan BAZI insanlar olmalı .
OmniOwl


1
Belki de bu sizin için en önemlisidir, ancak burada konu dışıdır ( SSS'ye bakın ). Soruyu da kapatmış olabilirdim. Nasıl başlayacağınız soruları sormak istiyorsanız Oyun Geliştirme Sohbeti'ni veya GDNet gibi gerçek bir tartışma forumunu ziyaret edin .

1
@Vipar Konu dışı soruyla ilgili yardım almak istiyorsanız sohbete katılın. Yardım alacağınızı garanti etmemekle birlikte birçok akıllı insan orada takılıyor.
ClassicThunder

Yanıtlar:


10

Bunun doğru olmadığını söyleyebilirim. Veri odaklı tasarımdaki en önemli fikrin, verilerinizi verileri neyin değiştirdiğinden (veya güncellediğinden) ayırmak olduğuna inanıyorum .

Yani, standart bir OO derin hiyerarşisinden böyle gidiyor:

class MyCreature{
     vector position;
     void update(){ position += 1; }
}

ayrı bir duruma ve sisteme

class CreatureState{
    vector postion;
}

class MovementSystem{
    list<CreatureState> states;
    void update() {
        for each CreatureState state in states {
            state.position += 1;
        }
}

Şu anda en etkili DDD paradigmaları Varlık Sistemleri'dir. Aramak için bazı güzel kaynaklar:

http://gamedevrubberduck.wordpress.com/2012/12/26/a-hybrid-entity-system-component-architecture/

http://entity-systems.wikidot.com/

Elbette tüm paradigmalarda / fikirlerde olduğu gibi, kesin bir tanım yoktur ve DDD konuşurken herkes aynı fikri anlamaz, ancak en önemli şeye inanıyorum.


Evet, ayrılık kısmından bahsetmeyi unuttum. Ve bu tam olarak görmek istediğim bir şey. Sadece çok fazla teori okuyabilirim. Bazı somut örnekler görmem gerekiyor. Teşekkür ederim. Makalelere de göz atacaksınız!
OmniOwl

Ah bekle sonunda bir süre önce okuduğum en iyi açıklamayı buldu. Burada sorduğum bir soruya cevap olduğu ortaya çıktı gamedev.stackexchange.com/questions/48971/… : D
Roy T.

4

Bence tanımı çok karmaşık hale getiriyorsun. Kesinlikle, madde işaretli puan listenizde yer alan ilkelerin çoğu, bir yazılım mühendisliği perspektifinden iyi olanlardır, ancak hepsi mutlaka "veri odaklı" tanımının bir parçası değildir. Birçoğunun bir miktar örtüşmesi var veya en iyi şekilde veriye dayalı bir yaklaşım kullanılarak uygulanıyor , ancak veriyi bir şey yapma eylemi oluşturmuyor.

Veriye dayalı yazılım geliştirmenin gerçek tanımı genellikle oldukça basittir: bir program, kod içinde bir dizi önceden tanımlanmış ve sabit adım yerine, esasen bazı dış bilgilere (bir seviye veri, komut dosyası verileri, vb.) Dayalı eylemler gerçekleştirir. kontrol akışını belirler.


Muhtemelen işleri aşırı karmaşıklaştırdığım konusunda haklısınız. Yapmaya meyilli olduğum bir şey. Ama bunu kodlamaya nasıl başlayacağımı düşünemiyorum.
OmniOwl

1
GDNet'te sorunuza bir yanıt gönderdim . Sorunun en önemli noktası: çok çalışmayı bırak, nihayetinde istediğin şeyin basit bir yönünü seç ve onunla küçük bir oyun inşa et.

Gördüm ve ben de karşılık verdim. Benimle bunun hakkında konuşmaya zaman ayırdığınız için teşekkür ederiz.
OmniOwl
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.