Erleichterung der Bereitstellung von XNA-Spielen für Nicht-Programmierer

12

Ich arbeite derzeit an einem RPG, wobei ich das RPG-Starter-Kit von XNA als Basis verwende. (http://xbox.create.msdn.com/en-US/education/catalog/sample/roleplaying_game) Ich arbeite mit einem kleinen Team (zwei Designer und ein Musik- / Soundkünstler), aber ich bin der einzige Programmierer. Derzeit arbeiten wir mit dem folgenden (nicht nachhaltigen) System: Das Team erstellt neue Bilder / Sounds, die dem Spiel hinzugefügt werden sollen, oder ändert vorhandene Bilder / Sounds und legt ihre Arbeit in einem Repository ab, in dem wir einen aktuellen Build beibehalten von allem. (Code, Bilder, Sound usw.) Jeden Tag oder so erstelle ich ein neues Installationsprogramm, das die neuen Bilder, Codeänderungen und den Sound widerspiegelt, und jeder installiert es.

Mein Problem ist das Folgende: Ich möchte ein System erstellen, in dem der Rest des Teams beispielsweise die Kampfgeräusche ersetzen und die Änderungen sofort sehen kann, ohne auf meine Erstellung warten zu müssen. Das Setup von XNA codiert, wenn ich es veröffentliche, alle Bild- und Tondateien, sodass das Team nicht "hot swappen" kann. Ich kann Microsoft VS auf jedem Computer einrichten und ihnen zeigen, wie sie schnell veröffentlichen können, aber ich wollte wissen, ob es eine einfachere Möglichkeit dafür gibt.

Hat jemand bei der Arbeit mit Teams, die XNA verwenden, darauf gestoßen?

Sal
quelle
2
Meinen Sie mit XNA-Codierung aller Bild- und Tondateien, dass sie von der XNA-Inhaltspipeline erstellt und in .xnb-Dateien umgewandelt wurden?
David Gouveia
Ich kann mich nicht genau an die Erweiterung erinnern, aber sie gehen durch die Standard-Pipeline, ja.
Sal

Antworten:

12

Ich glaube nicht, dass Sie jedes Mal ein Installationsprogramm veröffentlichen und erstellen müssen. Erstellen Sie einfach das Projekt und platzieren Sie die Ausgabedateien (z. B. die EXE-Datei und den Inhaltsordner sowie eventuell verwendete DLL-Abhängigkeiten) im Repository, und es sollte auch auf ihrem Computer ausgeführt werden, sofern der XNA-Redist installiert ist.

Bei Ihrer Frage fallen mir zwei Lösungen ein, bei denen Visual Studio auf den Computern installiert wird und bei denen das Spiel einige Änderungen aufweist:

  • Bitten Sie sie, Visual Studio zu installieren, und bringen Sie ihnen bei, ihre Assets über die XNA-Inhaltspipeline zu übertragen. Sie müssen lediglich ein Inhalts-Pipeline-Projekt erstellen, die Dateien dorthin ziehen und erstellen. Anschließend können sie die resultierenden XNB-Dateien mit denen im Projektordner austauschen und die EXE-Datei ausführen, um die Änderungen anzuzeigen.

  • Wenn Sie für Windows entwickeln, können Sie Ihren Code so ändern, dass Assets zur Laufzeit in ihren ursprünglichen Formaten geladen werden, ohne die Inhaltsübersicht durchlaufen zu müssen. Zum Laden von Bildern, die Sie verwenden könnten Texture2D.FromStream(wie in diesem Beispiel ), und für Audio war die beste Lösung, die ich gefunden habe, die Verwendung der FMOD-API (wie in diesem Beispiel ). Dann können sie einfach die Assets direkt tauschen und das Spiel starten.

Um die Dinge noch weiter zu bringen, könnten Sie auch versuchen, Ihr Spiel so datengesteuert wie möglich zu gestalten. Dies bedeutet im Grunde, dass alles im Spiel, was Sie leicht ändern können sollten, wie z. B. die Zeichenklassenstatistik oder der Pfad der von Ihnen verwendeten Bilder und Tondateien, aus dem Code entfernt und in externen Textdateien abgelegt werden sollte (zB XML, JSON, INI). Dann müssen Sie diese Dateien nur noch in einem Texteditor bearbeiten, um Änderungen im Spiel zu sehen, und es ist kein Neuaufbau erforderlich.

David Gouveia
quelle
1
Vielen Dank für Ihre schnelle Antwort. Ich mag Ihre zweite Lösung, und ich habe eine Frage, die sich daraus ergibt: Gibt es in VS eine Möglichkeit, ein Flag zu erstellen, das dem #IF DEBUG ähnelt und das es mir ermöglicht, etwas wie #IF NON_PRODUCTION_MODE zu tun? Auf diese Weise kann ich alle FromStream () -Aufrufe in diesen Nichtproduktionsaufruf einschließen. Wenn ich bereit bin, das Spiel in die Produktion zu schicken, kann ich problemlos den Modus wechseln und die Sounddateien erneut codieren.
Sal
1
@Sal Ja, genau das kannst du tun. Überprüfen Sie die Dokumentation hier .
David Gouveia
1
@Sal Standardmäßig erstellt Visual Studio zwei Erstellungsprofile: Debug und Release. Sie können zwischen den beiden von wechselnBuild->Configuration Manager . Standardmäßig ist für den Debug-Build das DEBUGKompilierungssymbol definiert, dh Sie können Ihren nicht freigegebenen Code mit einem Zeilenumbruch versehen #if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif.
Cypher
1
@Sal Außerdem fand ich es viel einfacher, nur die bin / * -Verzeichnisse in das Repository aufzunehmen, und die Designer / artists / qa müssen nur den bin-Ordner auschecken, damit sie die neuesten und besten ausführen können. Auf diese Weise erhalten sie alle Abhängigkeiten, Texturen, Audiodaten usw. zusammen. Dann mussten sie jeden Tag nur noch tunsvn update ihrem Arbeitsverzeichnis sein und waren auf dem Laufenden.
Cypher
4

Ein bisschen zu spät zur Party, aber hier ist meine Idee.

Ich würde mit der 3. Möglichkeit gehen, die nichts anderes beinhaltet, als die bereits vorhandene Codebasis zu modifizieren. Dies funktioniert, wenn Sie die Binärdateien (die eigentliche Spiel-EXE-Datei und die zugehörigen DLL-Dateien aus der Kompilierung) irgendwo in einem Ausgabeverzeichnis festschreiben (und kopieren) - beispielsweise mit einem Post-Build-Skript. Ab jetzt gehe ich davon aus, dass es sich um Visual Studio 2010 und XNA Game Studio 4.0 handelt. (Die Vorgehensweise ist für andere Versionen sehr ähnlich. Es müssen nur einige Nummern ersetzt werden.)

Die Idee ist also: Erstellen Sie ein Skript (.cmd) im Stammverzeichnis Ihres Projekts, in dem sich die .sln-Lösung befindet, mit den folgenden Schritten:

  1. Rufen Sie die "Visual Studio 2010-Eingabeaufforderung" auf:

    Rufen Sie "C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ VC \ vcvarsall.bat" x86 auf

    Dies ist erforderlich, damit unser Skript die XNA-Bibliotheken sowie alle erforderlichen Tools und Binärdateien finden kann.

  2. Rufen Sie die MSBuild-Aufgabe für das Inhaltsprojekt (.contentproj) auf:

    msbuild / property: XNAContentPipelineTargetPlatform = Windows / property: XNAContentPipelineTargetProfile = mygame.content / projectfile.contentproj erreichen

    Sie können die Eigenschaften durch Angabe verschiedener Plattformen / Profile ändern. Sie können sogar noch weiter gehen, um den Inhalt für mehrere Plattformen gleichzeitig zu erstellen (Windows Phone, Xbox 360 oder Windows). Das Profil kann sein: Reach oder HiDef (http://msdn.microsoft.com/en-us/library/ff604995.aspx)

  3. Kopieren Sie die Ausgabe rekursiv in den Ordner, in dem die Binärdateien + das aktuelle Spiel im Repository gespeichert sind:

    xcopy / d / y / i / e bin \ x86 \ Debug \ Content * .. \ game_output \ Content

    Ausführliche Informationen zu den Fahnen, können Sie in der Eingabeaufforderung aufrufen: xcopy /?. Die wichtigsten sind: /dNur geänderte Dateien kopieren - wenn Sie viele Assets haben, ist es nützlich, die bereits vorhandenen und nicht geänderten nicht immer wieder zu kopieren. /yzum automatischen Überschreiben vorhandener Dateien, damit diese mit einer neueren Version aktualisiert werden können. Ich habe verwendet, xcopyweil der normale copyOrdner meines Wissens nicht rekursiv kopieren kann - und wahrscheinlich strukturieren Sie den Inhalt in Ordnern und Unterordnern. Außerdem ist es besser als normal copy(viele verschiedene Flaggen).

  4. Rufen Sie auf, pausedamit das Skript auf Benutzereingaben wartet. Dies ist nützlich, um zu überprüfen, ob der Build in Ordnung war und keine Fehler aufgetreten sind.

Jetzt müssen die Künstler (oder alle anderen), die die Inhaltsdateien ändern, nur auf das .cmd-Skript doppelklicken. Der neue Inhalt wird erstellt und in das Ausgabeverzeichnis kopiert, in dem die festgeschriebenen Artefakte zum Testen bereitstehen.

Es gibt jedoch ein kleines Problem, für das Sie auf den ersten Punkt von Davids Beitrag zurückgreifen müssen: Wenn die Künstler das Inhaltsprojekt durch Hinzufügen / Entfernen / Verschieben von Dateien ändern möchten, müssen sie dies tun, indem sie das öffnen Projekt in Visual Studio (oder Bearbeiten der Projektdatei von Hand, was ich bezweifle, dass jemand tun würde). Wie ich bereits sagte, ist dies ein kleines Problem, da sie einfach die neuen Dateien im Repository festschreiben können, und Sie, der Codierer, werden sie in das Inhaltsprojekt aufnehmen, wenn der Code für diese fertig ist.

Auf dieser Idee veröffentlichte Shawn Hargreaveas etwas über msbuild und das Erstellen der Inhaltsprojekte über die Befehlszeile: http://blogs.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time .aspx Seine Lösung bestand darin, eine neue Datei zu erstellen, aber ich denke, es ist einfacher und einfacher, die bereits vorhandene Projektdatei direkt zu verwenden.

PS: Sorry für den langen Beitrag xD

Timotei
quelle