Ich codiere mein Spiel mit einem Client-Server-Modell. Beim Spielen im Einzelspieler-Modus startet das Spiel einen lokalen Server und interagiert mit ihm wie mit einem Remote-Server (Mehrspieler). Ich habe dies getan, um zu vermeiden, dass Einzelspieler- und Mehrspieler-Code getrennt codiert werden.
Ich habe gerade mit dem Codieren begonnen und bin auf ein großes Problem gestoßen. Derzeit entwickle ich das Spiel in Eclipse, wobei alle Spielklassen in Paketen organisiert sind. Dann verwende ich in meinem Servercode einfach alle Klassen in den Client-Paketen.
Das Problem ist, dass diese Clientklassen renderspezifische Variablen haben, die auf einem Server offensichtlich nicht ausgeführt würden.
Soll ich geänderte Versionen der Clientklassen erstellen, die auf dem Server verwendet werden sollen? Oder sollte ich einfach die Client-Klassen mit einem Booleschen Wert ändern, um anzugeben, ob der Client / Server ihn verwendet. Gibt es noch andere Möglichkeiten, die ich habe? Ich habe gerade darüber nachgedacht, die Serverklasse als Kernklasse zu verwenden und sie dann mit Rendering-Elementen zu erweitern.
quelle
Antworten:
Sie sollten es vorziehen, Ihren Rendering-Code von Ihrer Spielelogik zu trennen, da es sich um separate Probleme handelt .
Wenn Sie Ihren Rendering-Code von Ihrem Client / Server-Code trennen, erhalten Sie einige Vorteile:
update
Phase von Ihrerrender
Phase trennen und in unterschiedlichen Zeitschritten ausführen.const
, indem Sie Fehler reduzieren.quelle
Ich denke, Sie sollten Client- und Server-Code sauber trennen. Der Servercode und der Clientcode sollten einander nicht kennen, mit Ausnahme der Funktionen, die mit Schnittstellen verfügbar gemacht werden. Der Server soll nichts über Rendering wissen, nur Clients registrieren, Positionen, Zeit usw. verfolgen. Wenn Sie Bedenken sauber getrennt haben, ist es einfacher, Ihr Spiel zu pflegen und weiterzuentwickeln. Hoffe das hilft ein bisschen.
quelle
Trennung von Anliegen FTW, wie die anderen gesagt haben, aber wenn Ihr Endziel darin besteht, Client- und Serveranwendungen zu trennen, müssen Sie noch einen Schritt weiter gehen. Sie müssen bestimmen, was clientspezifisch, was serverspezifisch und was gemeinsam genutzt wird. Teilen Sie alles, was gemeinsam genutzt wird, in Klassen von ausschließlich gemeinsam genutztem Code auf. Client- oder serverspezifische Klassen können dann die gemeinsam genutzten Klassen nach Bedarf in Unterklassen unterteilen oder darauf verweisen. Verschieben Sie die gemeinsam genutzten Klassen in ein separates Projekt, erstellen Sie eine JAR-Datei mit "gemeinsam genutzter Bibliothek" und fügen Sie diese JAR-Datei sowohl in das Client- als auch in das Serverprojekt ein.
Dies hat ein paar Vorteile: Es macht die Trennung von Anliegen glasklar, alles in getrennten Projekten zu halten; Es stellt sicher, dass Client und Server mit demselben gemeinsam genutzten Code starten (sofern sie dieselbe Version der gemeinsam genutzten JAR verwenden). und es macht es unmöglich, "versehentlich" gemeinsam genutzten Code zu ändern, ohne es zu bemerken. Wenn sich der freigegebene Code in einem eigenen Projekt befindet, wissen Sie beim Bearbeiten von Elementen in diesem Projekt, dass Sie wissen müssen, wie sich die Änderungen sowohl auf den Client als auch auf den Server auswirken.
quelle