Minecraft gibi bloklarla bir oyunun verilerini saklamanın birkaç farklı yolu vardır.
Minecraft'ın buna inanma şekli, dünyayı 16x16x256 Topakları'nda kırıyor. Oynatıcı oyuna başladığında oynatıcının etrafındaki parçalar belleğe yüklenir, daha sonra etrafta dolaşırken arka plan iş parçacığı daha fazla yüklenir. İşte gösteren bir video: http://www.youtube.com/watch?v=oR_ZdJH9eho .
Bunu yapmanın başka bir yolu da dünyayı bir Octree'ye bölmektir. Michael Goodfellow, bu veri yapısı ile bir küp dünyasının uygulanması hakkında bir blog yazdı: http://www.sea-of-memes.com/LetsCode1/LetsCode1.html . Octree güzel çünkü bazı yerleşik sıkıştırma sağlar, ancak muhtemelen bir Array ile çalışmak biraz daha zor olacaktır.
"Sadece ihtiyaç duyulanları bellekte tutmak?" Ne gerekli olduğunu sormak zorunda çünkü bu biraz daha zor. Dünyanın başka bir yerinde, çevre ile etkileşime giren yapay zeka ile yaşayan NPC'leriniz varsa, o zaman bellekte olmak için dünyanın çok daha fazlasına “ihtiyacınız” vardır. Voxel dünya verileri çok hızlı çok büyük olabilir, bu yüzden mümkün olan en az miktarda hafızada kalmaya çalışmak en iyisidir. (IE, yalnızca oynatıcının yakınında NPC'lere sahiptir).
Grafik motoru, diğer şeffaf olmayan bloklarla tamamen çevrili olmayan her bloğa "ihtiyaç duyacaktır". Dünyayı oluşturmanın olağan yolu, görünür her blok için köşeleri içeren tek bir kafes oluşturmaktır. 65.536 blok için (Minecraft boyut yığınlarında) yalnızca 1 çizim çağrısı yaptığınız için bu çizmek çok daha hızlıdır. Grafik motorunun bu ağı oluşturması gerektiğinden, genellikle bir yığındaki tüm küpleri bilmesi gerekir. Bu yüzden Minecraft'ta zemini gördüğünüzde, dünyanın bir çok görünmez olduğunu unutmayın. Bunun nedeni, altı tarafın etrafını saran her bloğun atlanmasıdır. Minecraft'ın aynı tür dokunun yatay kenarlarını doku tekrarı ile tek bir kutuda birleştirerek köşe sayısını da azalttığına inanıyorum.
Benim tavsiyem 16x16x256 parçaları ile gitmek olacaktır. Mesh ve oyun mantığı (çarpışma algılama, blok ekleme / çıkarma, vb.) Nedeniyle hızlı yineleme ve düzenlemeye ihtiyacınız olacağından bunları bir Array'da saklayın. Ardından, oynatıcının çevresini olabildiğince çok parçaya yükleyin. Daha iyi veya daha kötü bilgisayarlar için parça sayısını artırın veya azaltın.
Parçaların yüklenmesi performansta büyük bir hit olacak, bu yüzden onu zaman içinde çalıştıran bir iş parçacığına koyun. Bir oyuncunun bir parçanın bir ucundan diğer ucuna yürümesi gereken süre boyunca tamamen 3 yeni Tıklama yükleyebilmenizi sağlayın.