Prosedürel bir dünya nasıl kurtarılır?


17

Son zamanlarda prosedürel dünyaların nasıl yaratılacağını okudum ... ama bir dünyayı nasıl kurtarabilirim?

Terraria veya Minecraft gibi oyunlarda kullanıcılar manzarayı özgürce değiştirebilir, ancak bu dünya başlangıç ​​tohumundan yeniden oluşturulamaz. Prosedürel fakat değiştirilebilir dünyaları kurtarmak için hangi teknikler kullanılır?

Yanıtlar:


21

Dünyayı oluşturmak için kullandığınız tohumu ve modifikasyonları ya atomik "komutlar" ya da bunların sonuçları olarak kaydedin.

Ardından kaydedilen oyunu yüklerken aşağıdakileri yaparsınız:

  1. Prosedürel olarak dünyanın şu anda ziyaret ettiğiniz kısmını oluşturun.
  2. Kaydedilen komutları uygulayın veya oluşturulan öğeleri kaydedilen komutların üzerine yazın.

Güncelleme: Ve elbette, kaynaklar mevcutsa (Minecraft'ta görüldüğü gibi) oluşturulan dünyanızı normal bir dünya gibi kaydetme seçeneği var. Bu durumda, sadece dünyanın daha önce ziyaret edilmiş olan kısımlarını (aksi takdirde prosedürel üretim neredeyse anlamsız olurdu), fayans döşemeyi kaydetmelisiniz. Bu, daha fazla HDD ve / veya veritabanı kaynağı tüketir, ancak oyun yüklenirken daha az CPU gücü gerektirir.


2
Değişikliklere ek olarak, muhtemelen prosedürel dünyayı oluşturmak için kullanılan tohumu kurtarması gerekir ;-)
bummzack

@bummzack Evet tabii ki, bundan bahsetmeyi unuttum, çünkü belli ki :-) Cevabımı düzenleyeceğim.
Marton

10
Dünyayı tohumdan yenilemenin en iyi fikir olduğundan tam olarak emin değilim. Dünya üretimi genellikle karmaşık algoritmalar içerir ve bu nedenle zaman alır: genellikle yer kazanmak için değil, rastgele olmak için rastgele dünyalar üretiriz. Bu nedenle, tüm dünyayı ikili bir formatta kaydetmenin daha verimli olacağını düşünürüm.
Jonathan Connell

2
Yani prosedürel olarak oluşturulmuş bir dünyayı kurtarmayı söylüyorsunuz, onu yaratıp sonra mı kurtarıyorsunuz? Bu tam bir cevap değil.
MichaelHouse

2
@ Random832 Minecraft yapar ziyade tohumdan onu yenileyici ve modifikasyonları oynatırken yerine, ikili formatta dünyanın kurtulmasına. Minecraft tüm dünyayı kurtarma sorununu çözmek için, şimdiye kadar üretilmiş parçaları kurtarır. Dünyayı daha fazla keşfettikçe, kaydetme oyununuz büyür.
Joseph Mansfield

8

Prosedürel olarak oluşturulmuş bir dünyayı kaydetmek, herhangi bir döşeme haritası verisini kaydetmekle aynıdır.

Muhtemelen dünyanın farklı kiremit türlerinden oluştuğunu varsayarsak, dünyayı ikili biçimde kaydetmek istersiniz:

  1. Toplam farklı döşeme türü sayısına karar verin. (Her döşemeyi temsil etmek için daha fazla veya daha az bite ihtiyacınız olacaktır)
  2. Ziyaret edilen (değiştirilen) dünyanın genişliğini ve yüksekliğini tanımlayın.
  3. Dünya döşemesini, en soldaki en üstteki döşemeden (gökyüzü dahil) satır satır en sağdaki döşemeye karo olarak temsil edin.
  4. Yerden tasarruf etmek istiyorsanız, bu 2d diziyi (1-d olarak temsil edilir) sıkıştırmak için DEFLATE veya benzeri bir algoritma kullanın http://en.wikipedia.org/wiki/DEFLATE
  5. Verileri diskte saklamak için API'niz için uygun dosya G / Ç kullanın.

Voksel tabanlı bir haritayı kaydetmek için de aynı yöntemi kullanabilirsiniz.

Köşeleri temel alan bir harita modelini saklamak daha karmaşıktır.

Bu konu hakkında ayrıntılı bilgi vermemi ister misiniz?


İsterseniz, her döşemeyi kodlayan renkle bir png dosyasına kaydedebilirsiniz. Bu, özel bir görüntüleyici kullanmadan sonucu hızlı bir şekilde gözden geçirmenizi sağlar.
wolfdawn


3

Dünyayı bellekte saklamak için kullandığınız veri yapısı ne olursa olsun diskten yazma ve okuma için bir şablon olarak kullanılabilir. Diskten veri yoksa, oyununuzun prosedürel kısmı bu veri yapılarını ilk kez dolduracaktır. Ardından, bir alanı bellekten boşaltmaya hazır olduğunuzda, oluşturulduğu veya değiştirildiği gibi diske yazın.

Belleğe yeni bir alan yüklemeye hazır olduğunuzda, önce daha önce oluşturulup oluşturulmadığını ve diske kaydedilip kaydedilmediğini kontrol edin. Varsa, yordamsal oluşturma algoritmalarınız yerine diskten yükleyin.

Tipik olarak bu, arazi parçaları ile yapılır. Her bir parçayı kendi dosyasına kaydedebilir veya arama tablosuyla tek bir dosyada veri içeren disk yapısında daha karmaşık bir yapı oluşturabilirsiniz. Verilerinizi diske kaydetmenin iyi yolları hakkında başka sorular da vardır .

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.