XNA çerçevesi sunucu tarafı programlama için uygun mu?


11

Ben metin tabanlı bir MUD oluşturmak için arıyorum, bu yüzden XNA çerçevenin öğeleri bir sürü ihtiyacım olan uygun görünüyor. Özellikle genel oyun döngüsü, ağ iletişimi vb. Gibi şeyler. XNA, UI ve ses ile etkileşimli bir ortama sıkıca bağlı gibi görünüyor, bu yüzden gitmek için doğru yol olup olmadığından emin değilim.

Bu tür yönleri kendim yeniden oluşturmak, XNA çerçevesini ihtiyacım olana bükmeye çalışmak daha kolay mı yoksa bu tür işler için daha iyi bir çerçeve var mı?

Yanıtlar:


5

XNA çerçevesinin size metin tabanlı bir oyunun sunucu tarafı için çok fazla fayda sağlayacağını düşünmüyorum, hayır. Bu kullanım durumu için standart .NET framework sınıfı kitaplıklarına bakmalısınız.

Ancak soruyu biraz genişletmekle birlikte, XNA çerçeveleri gerçekten müşteri tarafı 2d ve 3d oyun geliştirme için tasarlanmış olsa da, bunların bir kısmını 2d veya 3d oyunun sunucu tarafında kullanmasına neden olabilir. Grafik motorunun bazı bölümlerini sunucuda yeniden kullanmak yaygındır, çünkü sunucunun istemcinin yaptığı gibi görünürlük ve çarpışma testi gibi şeyler yapması gerekir. Bu senaryoda, motorunuz XNA'dan matematik kitaplığını kullandıysa, bunu sunucu kodunuzda da bağlamanız gerekir.


3

C # kullanıyorsanız, ağ katmanını soyutlamak için WCF kullanmayı düşünmelisiniz. Bir MUD, göreceli olarak çok fazla ağ trafiğine sahip olmaz, bu nedenle bu rotaya gitmek sizin için işleri daha kolay hale getirebilir. WCF'yi sıra tabanlı bir strateji oyunu için kullanıyorum ve benim için oldukça iyi çalıştı.


1
Genel olarak kabul ediyorum, ancak WCF düz telnetbağlantıları desteklemiyor . Normal metin tabanlı MUD'lar için, kullanıcıların telnetsunucuya izin vermesi verilir.
Agent_9191

@ Agent_9191 Hedeflerinize bağlı olarak, telnetarayüzün daha sağlam bir API'nin, örneğin WCF üzerine inşa edilmiş bir API'nin üstünde bir katman olması mantıklı olabilir .
Cody Brocious

WCF gecikme getirmez mi veya ham soketlerden konuşan özel bir ciltleme kullanır mısınız?
Nate

Bir telnet arayüzüne ihtiyacı varsa, WCF muhtemelen iyi bir seçim değildir; Aşırıya kaçacağından şüpheleniyorum. Ancak, ileri geri gönderilen bilgilerin nispeten basit olacağını düşünerek gecikmenin bir sorun olacağını düşünmüyorum - birçok web hizmetinin yüklerinden kesinlikle daha basit. WCF'yi oldukça karmaşık bir sıra tabanlı strateji oyunu için kullanıyorum ve performans sorunlarım olmadı. Özel serileştirme ile yükü küçük tutuyorum ve gecikme bir sorun değil çünkü mesajlar çok sık ileri geri gönderilmiyor (projem için çoğu mesaj her dönüşün sonunda gerçekleşiyor).
Mike Strobel

1

XNA yoluna gidebilir ve sadece istediğiniz öğeleri (ses, ağ, vb.) Kullanabilirsiniz; ancak, projenizin karmaşıklığını artırır ve kod tabanını "anında anlama" nızı azaltır.

Temel olarak, daha fazla ara katman yazılımı ekledikçe, ara katman yazılımının uygulamasına girmedikçe, kodunuzun gerçekte çalışma şekli hakkındaki bilginiz azalır. Kendinize uzaklaştıkça verimliliği, yeteneği ve anlayışı kaybedersiniz.

Bu nedenle, yukarıda belirtildiği gibi, C # ve uygun XNA olmayan kütüphaneleri kullanmanız çok daha yararlı olacaktır.

Bunu kendi düzenlemeniz için yapıyorsanız, bölgeyle ilgilendiğiniz yerde kendiniz de yuvarlayabilirsiniz - bu şekilde daha fazla bilgi edineceksiniz.

Göreyim seni! İyi eğlenceler!


1

Büyük ölçüde gereksinimlerinize bağlıdır.

Sesi desteklemekle ilgileniyorsanız, arkadaş davet ediyor, et Cetera, XNA'nın yol olduğunu düşündüğümden daha fazla.

Ağ için XNA kullanırken karşılaştığınız en büyük sınırlama, oyun başına 32 oyuncunun oyuncu sınırıdır.

XNA çerçevesiyle bir oyun geliştirdiğinizde, tüm çeşitli API'lara bağlanması kesinlikle gerekli değildir. Birçok kişi XNA çerçevesini kullanır, ancak ağ oluşturma için diğer çerçevelere güvenir.

Benim önerim, ağ yönüyle ilgili ihtiyaçlarınızı ve isteklerinizi fiziksel olarak (not defterine veya başka bir yere yazın) listelemektir. Ardından çeşitli çerçeveleri karşılaştırın ve karşılaştırın.


-1

"Sıfırdan oluştur" demeye doğru eğildim, ama bu sadece C # ve MUD kodu ile ayrı ayrı çalıştığına dayanan bir bağırsak hissi. Her neyse, XNA'dan kullanabileceğiniz her şeyi kendi sürümlerinizi yuvarlayarak daha fazla kontrole sahip olacak ve daha fazla şey öğreneceksiniz.

En azından referans için mevcut bir MUD motorunu kullanmamanızın bir nedeni var mı?


Derece yapmak için mevcut bir motoru kullanıyorum. SMAUG kod tabanı C # varolan C tabanından bağlantı noktası deniyorum. Özellik kümesi çoğunlukla tanımlanır, sadece C # 'da çalışmasını sağlar.
Agent_9191
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.