Level Editor + Spiel -> Rendering / spielspezifischen Code duplizieren?

14

Ich habe gelesen, wie man Code für ein Spiel entwirft. Eine Sache, die ich nicht herausfinden konnte, ist: Wie schafft man es, einen Editor außerhalb des Spiels zu schreiben (keinen Editor innerhalb des Spiels), ohne den Code aus dem Spiel zu kopieren? Möglicherweise müssen Sie den gesamten Code für die verschiedenen Entitätstypen kopieren. Sie müssen den Spiel-Rendering-Code hinzufügen.

Ich vermute, dies kann erreicht werden, indem man eine DLL aus dem 'Engine'-Teil des Spiels macht. Teilen Sie es dann zwischen dem eigentlichen Spiel und dem Level-Editor.

Oder gibt es einen besseren / einfacheren Weg, dies zu tun?

Utkarsh Sinha
quelle

Antworten:

13

Sie müssen Ihren Code in separate Projekte aufteilen (in derselben Lösung). Normalerweise hätten Sie folgendes Setup:

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

Bei noch größeren Projekten empfiehlt es sich, den Engine Core auf mehrere Projekte wie Core, Physik, Grafik, Audio, Eingabe und Netzwerk aufzuteilen. Alle diese Projekte können nicht aufeinander verweisen, sie verweisen jedoch auf Core, in dem Sie einige allgemeine Basistypen speichern können.

Wenn sie sich aufeinander beziehen würden, wäre die Trennung nutzlos.

Auf jeden Fall sollte dies Ihnen helfen, Teile Ihres Motors in anderen Projekten wiederzuverwenden. Für den Editor müssten Sie beispielsweise auf das Grafikprojekt verweisen, das auf Core selbst verweist.

Diese Trennung bedeutet auch, dass Sie jetzt Windows Only-Technologien wie WPF in Ihrem Editor verwenden können, während Ihr Spiel weiterhin auf Windows und XBLIG abzielen kann.

Weitere Informationen zur Verwendung von XNA in einer WPF-Umgebung finden Sie unter folgendem Link: http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- of-a-wpf-application.aspx

Roy T.
quelle
Vielen Dank! Ein bisschen mehr umschauen und ich fand das - create.msdn.com/en-US/education/catalog/sample/… - Es scheint, dass WinForms besser unterstützt wird als WPF!
Utkarsh Sinha
Hey, das stimmt, aber diese Stichprobe stammt aus dem Jahr 2008, bevor WPF richtig loslegte. Ich habe vor einem Jahr von WinForms zu WPF gewechselt und ich würde nicht für die Welt zurück wechseln :). Wenn Sie mit diesem Beispiel kompatibel bleiben möchten, können Sie WinFormsControlHost immer in einer WPF-App verwenden :).
Roy T.
4

Trennen Sie die Renderlogik so gut wie möglich von der eigentlichen Spielelogik, wenn Sie Ihre Game Engine entwerfen. Eine Möglichkeit, dies zu tun, ist zu verwenden Komponentenmusters beim Erstellen Ihrer Spiel-Engine. XNA verwendet dieses Muster beispielsweise auf Framework-Ebene, um die Flexibilität zu erhöhen. Verwenden Sie für das Rendern mit Ihrem Ebeneneditor dieselbe Codebasis. Schreiben Sie Wrapper, wenn Sie müssen.

Ähnlich ist ein anderes etwas populäres Muster könnte auch MVC (Model-View-Controller) helfen. Codieren Sie Ihren Motor wie gewohnt mit MVC. Sie können dann denselben Code für Ansicht und Modell verwenden, aber einen benutzerdefinierten Controller zum Bearbeiten des Modells für Ihren Level-Editor anstelle des Controllers der Spiel-Engine einfügen, der entsprechend der Spieleingabe aktualisiert wird. Implementieren Sie die Serialisierung für Spielmodelle, um sie aus dem Editor oder dem Spiel zu laden / zu speichern.

Wenn Komponenten in getrennten Baugruppen aufbewahrt werden, wird die Trennung natürlich gefördert ...

XiaoChuan Yu
quelle