Ist das XNA-Framework für die serverseitige Programmierung geeignet?


11

Ich möchte ein textbasiertes MUD erstellen, daher scheinen viele Elemente des XNA-Frameworks meinen Anforderungen zu entsprechen. Insbesondere Dinge wie die allgemeine Spielschleife, das Networking usw. Es sieht so aus, als ob XNA eng mit einer interaktiven Umgebung mit Benutzeroberfläche und Audio verbunden ist. Ich bin mir also nicht sicher, ob dies der richtige Weg ist.

Wäre es einfacher, diese Art von Aspekten selbst neu zu erstellen, zu versuchen, das XNA-Framework an meine Bedürfnisse anzupassen, oder gibt es ein besseres Framework für diese Art von Arbeit?

Antworten:


5

Ich denke nicht, dass das XNA-Framework Ihnen viel Nutzen für die Serverseite eines textbasierten Spiels bieten würde, nein. Sie sollten sich die Standard-.NET Framework-Klassenbibliotheken für diesen Anwendungsfall ansehen.

Aber die Frage ein wenig erweitern, obwohl die XNA-Frameworks wirklich für die Entwicklung von 2D- und 3D-Spielen auf Clientseite gedacht sind, kann es Anlass geben, Teile davon auf der Serverseite eines 2D- oder 3D-Spiels zu verwenden. Es ist üblich, Teile der Grafik-Engine auf dem Server wiederzuverwenden, da der Server genauso wie der Client Sichtbarkeits- und Kollisionstests durchführen muss. Wenn Ihre Engine in diesem Szenario die Mathematikbibliothek von XNA verwendet hat, müssen Sie diese auch in Ihrem Servercode verknüpfen.


3

Wenn Sie C # verwenden, sollten Sie nur WCF verwenden, um die Netzwerkschicht zu abstrahieren. Ein MUD würde relativ gesehen nicht viel Netzwerkverkehr haben, daher könnte es für Sie viel einfacher sein, diese Route zu wählen. Ich habe WCF für ein rundenbasiertes Strategiespiel verwendet und es hat für mich ziemlich gut geklappt.


1
Im Allgemeinen würde ich zustimmen, aber WCF unterstützt keine direkten telnetVerbindungen. Bei normalen textbasierten MUDs ist es selbstverständlich, dass Benutzer zum telnetServer gelangen.
Agent_9191

@ Agent_9191 Abhängig von Ihren Zielen kann es sinnvoll sein, die telnetSchnittstelle als Schicht auf einer robusteren API zu verwenden, z. B. einer auf WCF basierenden.
Cody Brocious

Würde WCF keine Latenz einführen oder würden Sie eine benutzerdefinierte Bindung verwenden, die Raw-Sockets spricht?
Nate

Wenn er eine Telnet-Schnittstelle benötigt, ist WCF wahrscheinlich sowieso keine gute Wahl. Ich vermute, es wäre übertrieben. Ich würde jedoch nicht glauben, dass die Latenz ein Problem darstellt, wenn man bedenkt, dass die hin und her gesendeten Informationen relativ einfach sind - sicherlich einfacher als die Nutzdaten vieler Webdienste. Ich benutze WCF für ein ziemlich komplexes rundenbasiertes Strategiespiel und hatte keine Leistungsprobleme. Ich halte die Nutzlast durch benutzerdefinierte Serialisierung klein, und die Latenz ist kein Problem, da Nachrichten nicht sehr oft hin und her gesendet werden (für mein Projekt geschieht das meiste Messaging am Ende jeder Runde).
Mike Strobel

1

Sie können die XNA-Route wählen und nur die gewünschten Elemente verwenden (Audio, Netzwerk usw.). Dies erhöht jedoch die Komplexität Ihres Projekts und verringert Ihr "sofortiges Verständnis" der Codebasis.

Grundsätzlich nimmt Ihr Wissen über die Funktionsweise Ihres Codes ab, wenn Sie mehr Middleware hinzufügen - es sei denn, Sie befassen sich mit der Implementierung der Middleware. Wenn Sie sich distanzieren, verlieren Sie an Effizienz, Fähigkeit und Verständnis.

Wie oben erwähnt, wäre es für Sie weitaus vorteilhafter, C # und die entsprechenden Nicht-XNA-Bibliotheken zu verwenden.

Wenn Sie dies für Ihre eigene Erbauung tun, können Sie auch Ihre eigene rollen, wo Sie sich für das Gebiet interessieren - auf diese Weise erfahren Sie mehr.

Tue es! Habe Spaß!


1

Dies hängt weitgehend von Ihren Anforderungen ab.

Wenn Sie daran interessiert sind, Audio zu unterstützen, lädt ein Freund ein und so weiter, als ich glaube, dass XNA der richtige Weg ist.

Die größte Einschränkung bei der Verwendung von XNA für das Networking ist das Spielerlimit von 32 Spielern pro Spiel.

Wenn Sie ein Spiel mit dem XNA-Framework entwickeln, ist es nicht unbedingt erforderlich, an alle verschiedenen APIs gekoppelt zu sein. Viele Benutzer verwenden das XNA-Framework, verlassen sich jedoch für die Vernetzung auf andere Frameworks.

Mein Vorschlag ist, Ihre Bedürfnisse und Wünsche für den Netzwerkaspekt physisch (in Notizblock oder so etwas aufzuschreiben) aufzulisten. Vergleichen und kontrastieren Sie dann die verschiedenen Frameworks.


-1

Ich neige dazu, "von Grund auf neu erstellen" zu sagen, aber das ist nur ein Bauchgefühl, wenn man mit C # - und MUD-Code getrennt gearbeitet hat. Sie haben mehr Kontrolle und lernen mehr, wenn Sie Ihre eigenen Versionen von allem rollen, was Sie ohnehin von XNA verwenden können.

Gibt es einen Grund, warum Sie keine vorhandene MUD-Engine verwenden, zumindest als Referenz?


Machen Sie einen Abschluss Ich verwende einen vorhandenen Motor als Referenz. Ich versuche, die SMAUG-Codebasis von der vorhandenen C-Basis nach C # zu portieren. Der Funktionsumfang ist also größtenteils definiert und funktioniert nur in C #.
Agent_9191
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.