Seviye Editörü + Oyun -> Render / oyuna özel kod çoğaltma?


14

Bir oyun için kod tasarlamayı okuyorum. Anlayamadığım bir şey var - oyundan 'kod' kopyalamadan 'bir oyun dışı seviye editörü (' oyun içi seviye editörü 'değil) yazmayı nasıl yönetiyorsunuz? Örneğin, sahip olabileceğiniz farklı varlık türleri hakkındaki tüm kodu kopyalamanız gerekebilir. Oyun oluşturma kodunu eklemeniz gerekecek.

Benim tahminim, bu, oyunun 'motor' bölümünden bir DLL yaparak yapılabilir. Ardından, gerçek oyun ve seviye editörü arasında paylaşın.

Yoksa bunu yapmanın daha iyi / daha kolay bir yolu var mı?

Yanıtlar:


13

Kodunuzu ayrı projelere ayırmanız gerekir (aynı çözümde). Genellikle aşağıdaki kuruluma sahip olursunuz:

-Engine Core       (DLL)
-Game + Game Logic (EXE)
-Content Pipeline  (DLL)
-Editor            (EXE)

Daha büyük projeler için, Motor Çekirdeğini Core, Fizik, Grafik, Ses, Giriş ve Ağ gibi birden fazla projeye ayırmak isteyebilirsiniz. Tüm bu projeler birbirine referans veremez, ancak hepsi bazı temel taban türlerini saklayabileceğiniz Core'a başvurur.

Eğer birbirlerine referans yapacaklarsa, ayrılık işe yaramaz olurdu.

Her neyse, bu, motorunuzun parçalarını diğer projelerde yeniden kullanmanıza yardımcı olacaktır. Örneğin, editör için Core'un kendisine referans veren Grafik projesine başvurmanız gerekir.

Bu ayırma aynı zamanda artık düzenleyicinizde WPF gibi Sadece Windows teknolojilerini kullanabileceğiniz anlamına gelirken, oyununuz hala Windows ve XBLIG'i hedefleyebilir.

XNA'yı WPF ortamında kullanma hakkında daha fazla bilgi için şu bağlantıya bakın: http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- of-a-wpf-application.aspx


Teşekkürler! Biraz daha etrafa ve bunu buldum - create.msdn.com/en-US/education/catalog/sample/... - Bu WinForms görünen WPF daha iyi desteklenir!
Utkarsh Sinha

Hey bu doğru, ama bu örnek 2008'den, WPF gerçekten yerden kalkmadan. Bir yıl önce WinForms'tan WPF'ye geçtim ve dünyaya geri dönmem :). Bu örnekle uyumlu kalmak istiyorsanız, WinFormsControlHost'u her zaman bir WPF uygulamasında kullanabilirsiniz :).
Roy T.Mar

4

Oyun motorunuzu tasarlarken, oluşturma mantığını olabildiğince gerçek oyun mantığından ayırın. Bunu yapmanın bir yolu, oyun motorunuzu oluştururken Bileşen desenini kullanmaktır . Örneğin, XNA bu modeli esneklik için çerçeve düzeyinde kullanır. Seviye düzenleyicinizle oluşturma için aynı kod tabanını kullanın; Gerekirse sarmalayıcılar yazın.

Benzer şekilde, bir başka popüler desen de yardımcı olabilecek MVC'dir (Model-View-Controller). MVC kullanarak motorunuzu normal olarak kodlayın. Daha sonra Görünüm ve Model için aynı kodu kullanabilirsiniz, ancak oyun motorunun Oyun girişine göre güncellenen Denetleyici yerine seviye düzenleyiciniz için Modeli düzenlemek için özel bir Denetleyici enjekte edebilirsiniz. Oyun modelleri için düzenleyici veya oyundan yüklemek / kaydetmek için serileştirme uygulayın.

Bileşenleri ayrı montajlarda tutmak elbette ayrılmayı teşvik edecektir ...

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.