Oyuncular için büyük bir alan gerektiren bir XNA oyunu oluşturuyorum. Şu anda, kullandığım test yükseklik haritası 4096x4096 ve 4 bit BMP olarak kaydedildi.
Yapmaya çalıştığım şey o büyük heightmap dosyasını alıp oyunda işlemek. Karşılaştığım sorun, mevcut belleğin çoğunu kullanacağı için tüm araziyi bir kerede belleğe yüklemenin verimsiz olmasıdır.
Karşılaştığım bir başka sorun da, XNA'da ayarlanan bir sabit sınır nedeniyle araziyi bir ilkel olarak oluşturamayacağım.
Bununla birlikte, aşağıda listelediğim bir dizi çözümle karşılaştım:
- Geçerli kullanıcının konumuna göre oluşturma - temel olarak dünyadaki yönleri ne olursa olsun kullanıcının çevresine bir kare çizme. Bu da tam olarak istediğim şey değil, çünkü hala kullanıcının görmediği alanı oluşturuyorsunuz.
- Kullanıcının yönüne ve konumuna göre oluşturma - Yükseklik haritasının hangi piksellerinin oluşturulması gerekiyordu, ancak bunun çok zor olduğu bir üçgen elde etmek için bir formül buldum.
- Araziyi birden çok parçaya bölme ve hangisinin kullanıcıya en yakın olduğunu oluşturma - Hala insanların görmeyeceği parçaları oluşturduğunuz için hala çok verimli değil. Ve yoğun iş gerektiriyor çünkü yükseklik haritamı birkaç parçaya ayırmam gerekiyor ve ölçeklenebilirlik büyük bir sorun haline geliyor.
Bu çözümleri denedikten sonra, ne yapacağım konusunda yeni fikirlerim var. İnsanların bana bu karmaşık algoritmaları yapmamı söylediği bazı cevaplar aldım, ancak bunları nasıl yapacağımı bile bilmiyorum.
Bu yüzden temelde XNA'da mizahi arazileri en yüksek verimlilikle oluşturmanın basit, basit bir yolunu istiyorum.
Genel olarak oyun geliştirme konusunda yeniyim, ancak umut verici görünüyorsa araştırmaya hazırım.
Güncelleme 1: Geoclipmapping yöntemini araştırdıktan sonra kodlamaya başladım. Tüm matematiği yaptım ve oyun çalışıyor. Ancak, son derece verimsiz - bu muhtemelen benim için kötü kodlama. 2FPS'de çalışır ve CPU'mun tam bir çekirdeğini kullanır. Ben kodu geliştirmeye çalışacağım, ama daha fazla yardıma ihtiyacım olacağını düşünüyorum, bu yüzden burada Terrain manager sınıfı için kodun bir Pastebin olduğunu . Daha verimli olabilmem için daha sonra daha fazla sonuç göndereceğim.