2009-04-21 9 views
2

Ich bin ziemlich verloren mit wo und wie die * .txt-Level-Dateien in meinem Spiel gespeichert werden.Wo lege ich meinen benutzerdefinierten Level-Ordner in XNA-Spiel?

Was ich in meinem Spiel will, ist die Verfügbarkeit einiger "vorgebackener" Levels, die mit dem Spiel installiert werden, aber auch die Möglichkeit für Benutzer, ihre eigenen Ebenen zu erstellen.

Also was ich getan habe, ist ein neues Verzeichnis in Visual Studio in den "Inhalt" Ebenen erstellt, und lege eine "level1.txt" dort. Aber die einzige Art, wie ich die Ebene zugreifen kann * .txt-Dateien ist durch vollständigen Pfad verwenden, und ich kann sie in meiner Visual Studio-Lösung nicht enthalten, da es nicht bauen:

"C:\My Documents\blahblabh....\levels\level1.txt" 
  • Muß ich setzte diese „vorgebackenen "maps statt in ein Verzeichnis in der Nähe der ausführbaren Datei? Wie erstelle ich ein Verzeichnis innerhalb des Verzeichnisses/bin Bevor ich das Projekt kompiliere?
  • Wie kann ich Benutzer davon abhalten, die "vorgebackenen" Levels zu löschen, die mit dem Spiel installiert wurden?
    (Ich brauche das nicht mehr)
  • Auch, wo ich die benutzerdefinierten Ebenen Benutzer gespeichert? Ich gehe davon aus, dass dies mit StorageDevice geschehen sollte. Aber das hängt mit der ersten Frage zusammen, wie man ein Verzeichnis nach der Bereitstellung des Spiels erstellt.

Alle Hinweise wären willkommen! Danke

EDIT: Re: kundenspezifischer zufriedener Prozessor. Das scheint viel komplizierter als ich brauche. Aber ich muss mein Spiel auch auf xbox360 bereitstellen, also wird das Speichergerät funktionieren?

Antwort

3

Sie könnten einen eigenen Content-Prozessor schreiben, um Ihre Level-Dateien zu verarbeiten, aber es ist wahrscheinlich zu viel. Dies hat den Vorteil, dass Sie die Ebenen zu einem Format "kompilieren" können, das für einen Benutzer schwieriger zu ändern ist.

Sie können es einfach zu Ihrem Projekt hinzufügen (nicht im Inhalt) und in den Eigenschaften "In Ausgabeverzeichnis kopieren - Immer kopieren" angeben. Erstellen Sie einen neuen Unterordner in Ihrem Projekt und legen Sie ihn dort ab - das ist das Verzeichnis, in das er kopiert wird.

Um Benutzern das Löschen von Prebaked-Levels zu verbieten, gibt es keine Möglichkeit, dies unter Windows zuzulassen. Sie könnten Ihren Code einchecken, der einen Fehler verursachen würde, wenn ein Benutzer einige erwartete Dateien löschen würde.

Zum Erstellen eines neuen Verzeichnisses können Sie den StorageDevice.OpenContainer(). Path verwenden, um den Stammpfad abzurufen und Directory.CreateDirectory zu verwenden. Dies funktioniert auf PC und XBox.

+0

Das Schreiben eines benutzerdefinierten Content-Prozessors ist nicht so schwierig und erzwingt gute Praktiken und zwingt Sie, eine vernünftige Validierung zu schreiben, während Sie Ihr Spiel beim Laden aufgrund eines viel einfacheren Leseformats beschleunigen. Es macht es auch viel einfacher, später auf X360 zu portieren. Kurz gesagt, es erfordert etwas mehr Aufwand, verhindert möglicherweise viele Fehler und ist der akzeptierte Weg, dies zu tun.:) – jfclavette

+0

@jfclavette: Es ist wahrscheinlich Overkill für diese Aufgabe, aber es wäre definitiv eine gute Lernerfahrung - XNA ist sehr auf die Content-Pipeline konzentriert und es gibt keinen besseren Weg, um es herauszufinden. – Michael

+0

"Solange die Ebenen unter" Inhalt "veröffentlicht sind, sollten Sie Game.Content.RootDirectory verwenden können, um die Dateien zu finden und sie einzulesen". Dies funktioniert nicht. Denn wenn ich mein "levels" -Verzeichnis unter Inhalt lege, wird es aus irgendeinem Grund nicht in das Verzeichnis/bin kopiert. Beachten Sie, dass ich meine "level1.txt" im Ordner "Content/levels" nicht in Visual Studio aufnehmen kann, da sie nicht kompiliert wird. – drozzy

0

Sie sollten auf jeden Fall "Prebaked" Ebenen mit der ausführbaren Datei. Ich benutze VS nicht, also kann ich dir nicht sagen, wie das geht.

Es gibt wirklich keine Möglichkeit zu verhindern, dass Benutzer Ihre Ebenen löschen, aber Sie können einen Hash verwenden, um zu überprüfen, dass sie nicht geändert wurden (Benutzer können dies umgehen, indem Sie Ihre ausführbare Datei ändern, aber das sollte die meisten Benutzer stoppen).

Sie sollten benutzerdefinierte Ebenen in den Benutzerordner wie C:\Documents and Settings\User\MyGame\levels\level.txt setzen.

Verwandte Themen