Tek oyunculu bir motor geçersiz verileri ne kadar güçlü bir şekilde reddetmelidir?


11

Tek oyunculu bir oyunda, bir varlığı harici komut dosyalarında belirtilen bileşenlerden oluşturmaya çalışırken, bileşenlerden biri yanlış biçimlendirildiğinde ne olması daha fazla arzu edilir?

  • Motor bu bileşeni atlamalı ve varlığın oyun dünyasında sadece iyi yazılmış bileşenlerle yaşamasına izin vermeli mi?
  • Yoksa bileşenlerden biri kötü biçimlendirilmişse, varlığı dünyaya eklememeli midir?

Not, sadece varlığa ne olması gerektiği hakkında - söylemeden gelmesi gereken - hataları günlüğe kaydetmekten bahsetmiyorum.


Tek oyunculu mu yoksa çok oyunculu mu?
o0 '.

@Lohoris Tek oyuncu.
Paul Manta

2
Cevapların çoğu zaten belirtildiği gibi, kitleniz kim? Modifiye edilebilir bir oyun mu yapıyorsunuz yoksa dahili gelişim için mi bahsediyorsunuz?
Tetrad

@Tetrad Oyunun olabildiğince modder dostu olmasını istiyorum.
Paul Manta

Yanıtlar:


11

Değiştirilebilir bir oyundan bahsediyorsanız, yukarıdaki önerilerinizden birini takip etmek isteyebilirsiniz. Ancak kendi hatalarınızı devretmekten endişe ediyorsanız, söyleme. Fail-Fast'ın savunucusu oldum . Bu bir o hata ise size bırakmadan önce oluşturduk ve zorunluluk gidermek, hata bariz yapmalıdır. Wiki sayfasının alt kısmında yer alan makale, hızlı başarısız olmanın neden iyi olduğu ve ne zaman kullanılması gerektiği ve kullanılmaması gerektiği konusunda iyi bir okuma.


2
Bu, kullanıcı hataları ve geliştirici hataları arasında ayrım yapan harika bir ikilik olduğunu düşünüyorum. Tam olarak aynı nedenden dolayı derleyici hatalarının düzeltilmesi oldukça kolaydır, ancak çalışma zamanı / anlamsal hatalar şeytandır.
jhocking

Motor, oyun başladıktan sonra varlıkları değiştirmenin bir yolunu içeriyorsa, en azından başarısız olmadan önce hatayı düzeltmek için bir şans vermelisiniz.
Blecki

7

Oyun geliştirmede kullanıcı ve geliştirici arasındaki ayrım her zaman net değildir. "Hızlı başarısız" gibi standart programlama teknikleri, özellikle takım boyutları büyüdükçe, her zaman avantajlı değildir.

Örneğin, teknik sanatçınız gölgelendiriciyi hedefleme anahattı için vidaladı - geri dönüşü kırdı, diyelim, bu sadece SM4 sistemlerine yükleniyor ve fark etmedi çünkü hat sisteminin bir zirvesine sahip. Bu, bazı animasyonların yüklenememesiyle sonuçlanır. Bu animasyonlara, dövüş tasarımcınızın yazdığı belirli bir büyü tarafından referans verilir. Son olarak, seviye tasarımcınız yumurtlamaları yerine koymaya çalışıyor ve bu yumurtlamaların hepsi bu büyüyü yapabiliyor - ama şimdi dünyadan hiçbirini yerleştiremiyor çünkü büyüleri geçerli değil çünkü etkileri geçerli değil Tasarımcılar her zaman en kötü bilgisayarlara sahip oldukları için gölgelendiriciler yüklenmeyeceği için geçerli değil.

Bu yüzden demo saat 2'de hazır değil ve yatırımcılarınız neden oyunda tek bir düşman bile alamayacağınızı merak ediyor ve projeniz kapanıyor.

Ya da başarısızlığı günlüğe kaydettiğiniz ancak denemeye devam ettiğiniz seçeneği seçersiniz ve oyun bazı düşmanların büyü efektlerinin görünmemesi dışında iyi oynar - ancak yatırımcılar bunların nasıl görünmesi gerektiğini bilmiyorlar, bu yüzden farkına varmak.

Bu nedenle, neredeyse her zaman ilk seçeneği savunacağım - olabildiğince varlıkların ortaya çıkması. Başarısızlık gerektiren durumlar vardır - örneğin, yapıları yapabilecek kişiler (örneğin programcılar ve teknik üreticiler) ve yükte her zaman% 100 kontrol edilen kişiler veya kesinlikle sorumlu kişinin emin olduğunuzdan emin olmamanız gibi verilerin asla düzenlenmemesi gerekiyorsa sorun editörü kullanan kişidir - ancak bunlar olağan durumlar değildir ve yatırım yapmaya hazır olamayacağınız çok fazla teknik altyapı gerektirir.


1
Önerdiğiniz senaryonun iyi kaynak kontrol sistemleriyle önlenebileceğini düşünmek istiyorum. Senaryonuzda sanatçı "derlemeyi bozdu". Kırık gölgelendirici ile çalışan herkes, sorun çözülene kadar gölgelendiriciyi önceki bir revizyona geri alabilmelidir.
John McDonald

1
@John İyi bir kaynak kontrolü bir zorunluluk olsa da ve bazen bir arıza yerel olarak çözülene kadar bir projenin geri kalanını çalışma durumuna geri döndürmek için bir geri alma gerekli olsa da, bir önleme mekanizması olarak nadiren yararlıdır ve bu nedenle güvenilmemelidir .

@John: Büyük projelerde, yapılar saatlerce (veya tüm gün) sürebilir. Yani aslında iki yönlü bir yaklaşıma ihtiyacınız var - sadece kaynak kontrolüne değil, ikili kontrole de ihtiyacınız var, böylece programcı olmayan bir önceki tüm yapılara geri dönebilir. Ama elbette, bunun kendi riskleri ve maliyetleri var, çünkü şimdi diğer güncel olmayan içeriğe karşı , başka kötü hatalara sahip olabilecek yürütülebilir dosyalarla yeni içerik geliştiriyorsunuz . Ve geri dönmek için doğru yapıyı bulmak bile 30+ dakika sürebilir - tasarımcılarınızın yarım saat boyunca durması ve yapılarla uğraşması gerekiyorsa, bu büyük para israfı demektir.

@Joe Wreschnig: Bu mantıklı. Yani sanırım hızlı başarısızlığın artık bir varlık olmadığı bir nokta olmalı. Ya onu kullanan insan türlerinde ya da belirli bir boyuttaki projelerde. Sanırım onlar için neyin işe yaradığına karar vermek takımdaki insanlara kalmış.
John McDonald

2
Hızlı zor başarısızlıktan emin değilim , bu gerçekten sorunun ne olduğu, her zaman bir varlıktır. Tek bir kişi "takımında" bile, belki gölgelendirici koduyla uğraşmak istemiyorum çünkü gerçekten bu seviyeyi yapmak zorundayım. Kesinlikle iyi hata işleme yazın ve tüm hataları günlüğe kaydedin, ancak hemen hemen her zaman şu anda neyin önemli olduğu hakkında altı ay önce hata kodunu yazdığımdan daha iyi bir fikrim var .

1

Kullanıcı içe aktaracağı varlığı önizleyebilmeli ve hata olup olmadığını önceden bilmelidir.

Hangi hataların ölümcül olması gerektiğine bir şekilde karar vermelisiniz, oyuna eklenmesini engelleyin ve hangilerinin uyarı olarak reddedilebilir .

Elbette, içe aktarılan varlık herhangi bir nedenle kayıt oyunu verilerini geri döndürülemez bir şekilde değiştirebiliyorsa, kusursuz olmasını istersiniz.


0

Geliştirme sırasında, geçersiz veriler hakkında gürültülü olması gerektiğini öneririm. yani her şeyi okunacak bir yere kaydedin. Ancak, motorunuz bunu yoksayabilir ve devam edebilirse, bunu yapmalıdır. Gibi bir mantığa sahip olabilirsiniz

void setValue(int value) {
    if (value < MIN_VALUE) {
       log(value + " is too low, using " + MIN_VALUE);
       value = MIN_VALUE;
    }
    if (value > MAX_VALUE) {
       log(value + " is too high, using " + MAX_VALUE);
       value = MAX_VALUE;
    }
}

Çok oyunculu bir oyunda bile, bir oyuncunun sistemi aldatmaya çalıştığını varsaymazsanız bu kabul edilebilir.

Yazılımı serbest bıraktıktan sonra, oyuncuların bu günlükleri okumayacakları varsayımıyla varsayılan olarak bu günlük kaydını kapatmak isteyebilirsiniz.


Günlüklerin performans sorunu olmadığını varsayarsak, sürüm derlemelerinde oturum açmaya devam etmeli ve raporları geliştirme ekibine geri göndermelisiniz. (Tabii ki oyuncuları uygun şekilde bilgilendirmek.)

Serbest bırakmak için daha kısa günlükler kaydedebilmelisiniz. Gelişimde daha ayrıntılı olma eğiliminde olabilirsiniz.
Peter Lawrey
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.