Ich habe untersucht, wie die XNA Content-Pipeline für ein Spiel, an dem ich arbeite, angemessen verwendet werden kann. Es fiel mir jedoch schwer, meinen Kopf darum zu wickeln, und ich bin mir nicht sicher, wie ich am besten vorgehen soll.
Das konkrete Beispiel ist, ich habe ein 2-D-RPG-Spiel von oben nach unten. Ich möchte ein Dienstprogramm (wahrscheinlich Windows Forms) erstellen, mit dem ich Karten einfach erstellen und bearbeiten kann. Jede Karte besteht aus einer oder mehreren Grafikebenen, wobei jede Ebene ein N x N-Raster von Kacheln enthält. Jede Kachel beginnt wiederum als Bitmap.
Angesichts der obigen Informationen sehe ich einige Möglichkeiten, um fortzufahren:
- Speichern Sie die Karteninformationen in einer XML-Datei, die mit dem Content Pipeline XML Loader kompatibel ist. Jede Kachel wird als Zeichenfolgenreferenz auf das entsprechende Texturelement gespeichert. Textur-Assets werden im Spielprojekt hinzugefügt.
- Speichern Sie die Karteninformationen in einer XML-Datei, die mit dem Content Pipeline XML Loader kompatibel ist. Jede Kachel wird als Pfad zu den entsprechenden .bmp / .png-Dateien gespeichert.
Nun gibt es Dinge, die ich an beiden Ansätzen wirklich nicht mag. Das Hauptproblem bei Ansatz 1 besteht darin, dass die Kartenerstellung und die Erstellung des .xnb-Textur-Assets vollständig getrennt sind. Die XML-Map-Datei wird vom Dienstprogramm erstellt, während das Textur-Asset meinem Inhalt in meinem Spiel hinzugefügt wird. Dies wird zu einem Problem, bei dem versucht wird, sicherzustellen, dass die XML-Zuordnungsdatei und alle Textur-Assets im Projekt synchron bleiben.
Ansatz zwei würde es mir ermöglichen, alle entsprechenden Bilddateien neben den Kartendateien mit dem Kartendienstprogramm zu speichern. Es scheint jedoch, dass ich so etwas nicht tun sollte. Außerdem müsste ich beim Laden der Karten intelligenter sein, damit ich nicht für jede Kachel schnell das gleiche Bild von der Disc lade.
Meine Frage lautet also: Wenn Sie ein Dienstprogramm zur Inhaltsgenerierung (wie einen Karteneditor) hinzufügen möchten, wie können Sie am besten sicherstellen, dass der benutzerdefinierte Inhalt (Kartendatei) mit den Textur-Assets synchron bleibt. Denken Sie auch daran, dass ich in meinem Karteneditor die Fähigkeit benötigen würde, die Textur-Assets zu laden und anzuzeigen.
Jede Eingabe wird sehr geschätzt.
Fügen Sie alle Ihre Kachelbilder in eine einzelne Bilddatei ein und referenzieren Sie sie anhand der Kachelnummer.
Dies ist viel leistungsfähiger und fehlersicherer und hat den Vorteil, dass Sie Ihre Ebenen in einem Kachel-Editor wie Tiled einrichten können .
quelle
Ich bin mir nicht 100% sicher, ob ich Ihre Frage klar im Kopf habe, aber versuchen Sie Folgendes:
Sie müssen den Karteneditor führend machen und Ihrem Content-Projekt keine Assets hinzufügen, außer einer XML-Datei (game.xml oder so). Lassen Sie jetzt Ihren Level-Editor die Datei game.xml bearbeiten, indem Sie Links zu anderen Dateien hinzufügen. Wenn Sie beispielsweise eine neue Ebene in
<level rank=5>Content/MyLevel/level5.xml/>
Ihrem Ebeneneditor erstellen, wird das Tag Ihrer XML-Datei hinzugefügt.Um alles zu erstellen, müssen Sie eine benutzerdefinierte Inhaltspipeline-Erweiterung schreiben. (Stellen Sie sicher, dass Sie den neuen Importer und Prozessor in Ihrer Datei game.xml anstelle des Standard-XML-Prozessors festlegen.)
Dieser Prozessor durchläuft die XML-Dateien und erstellt alle Assets, indem er die entsprechenden Importeure und Prozessoren aufruft. So haben Sie alles gut gebaut und müssen nicht mehr zum Inhaltsprojekt und Ihrem Editor wechseln.
Ressourcen: http://msdn.microsoft.com/en-us/library/bb447754.aspx
quelle