XNA ile Oyun İçi Tasarım?


10

Oyun içi seviye tasarımını merak ediyorum. Mevcut durumum Kiremit etrafında dönüyor - İçlerinde farklı nesne türleri olan birçok farklı katmanım var (Kiremit'e aşina olmayan herkes için, bir nesne kendisine atanan keyfi özelliklere sahip bir koordinattan başka bir şey değildir).

Şu anda harita dosyamda küçük bir değişiklik yaptığımda her şeyin düzgün bir şekilde konumlandırılıp konumlandırılmadığını görmek için oyunu yeniden derliyorum. Bir harita dosyası değişikliği tespit edilirse oyunumun seviyeyi otomatik olarak yeniden yüklemem için bir yol var mı? XNA buna izin veriyor mu veya içerik boru hattının çalışma şekli dinamik içeriğe böyle bir şekilde izin vermiyor mu? Herhangi bir ipucu veya öneri kesinlikle bekliyoruz.

Yanıtlar:


8

Harita dosyalarınızın Content Pipeline aracılığıyla işlendiğini ve daha sonra çalışma zamanında Content.Load ile yüklendiğini varsayıyorum. İki seçeneğiniz var:

  • IntermediateSerializer.Serialize ile haritalarınızı XML dosyası olarak kaydedin. Sonra çalışma zamanında, değişiklikleri görmek için onları IntermediateSerializer.Deserialize ile okuyabilirsiniz.
  • Bu daha zor olanıdır: Dosyalarınızı uygun XNB'lere yeniden derlemek için çalışma zamanında MSBuild'i çağırmak ve ContentManager ile yeniden yüklemek. Bu örnek bunu yapar.

İkisi arasında, eminim ki bir şeyler çözebilirim. Teşekkür ederim!
Christopher Horenstein

2

Bunu yapmak ve gerçekten hızlı gitmek istiyorsanız Karvonite'i de kullanabilirsiniz .

Çevik bir kalıcılık çerçevesi. Yeni sürümün Windows Phone 7 veya Xbox'ta çalışıp çalışmayacağından emin değilim.

Kalıcılık düzenleyicileri ile bir kalıcılık tanımı oluşturursunuz (oldukça kolaydır, sadece montajı içe aktarırsınız ve kalıcı olmasını istediğiniz sınıflar / yapılardaki alanları / özellikleri kontrol edersiniz) Kodda bir ObjectSpace başlatır ve ondan nesne ekler / kaldırır / alırsınız . (bu nesneler kalıcıdır)

Eğer kiremit motoru ya da her ne olursa olsun, bir soyutlama oluşturabilirseniz, haritayı tam olarak nasıl aldığını umursamaz, sadece istediği şeyi alır. Sonra geri dönüp XmlSerializer veya Intermediate kullanabilirsiniz. (hangisini tercih ederseniz edin) Bu diğer serileştiricileri uygulamak için tek yapmanız gereken, soyutlamanın başka bir uygulamasını (bir arayüz veya soyut sınıf) oluşturmaktır.

XNA yaratıcısının kulüp web sitesinde çalışma zamanında içerik oluşturmanın bir örneği olduğunu düşünüyorum. Yine de en son çerçeve ile inşa edilmemiş olabilir. Bu şekilde, içerik kanalını zaten kullanıyorsanız eski kodunuzu koruyabilirsiniz. Bağlantı: Winform Series 2: İçerik Yükleniyor


Bunu biraz aptalca hissediyorum, ama bu çerçeveyi kullanarak iş akışını öngördüğünüzü tarif edebilir misiniz? Kulağa hoş geliyor, ama nasıl yaklaşacağımdan emin değilim.
Christopher Horenstein

1
Serileştirmeyi kalıcılık düzenleyicilerinde tanımlarsınız. (gerçekten kolay, sadece nesne montajınızı içe aktarırsınız ve yapıların / sınıfların ve kalıcı olmasını istediğiniz alanların / özelliklerin bazı kutularını işaretlersiniz) Bunu yaptıktan sonra, nesnelerinizi serileştirecek / serisini kaldıracak bir nesne alanını başlatabilirsiniz. . Kalkmak ve koşmak oldukça temiz ve hızlı.
Michael Coleman

1
Visual studio dışında içerik oluşturma konusunda daha iyi bir örnek için kod projesinde bu projeye bakabilirsiniz. ( xnadevru.codeplex.com/… )
Michael Coleman
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.