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?
Antworten:
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.
quelle
Build->Configuration Manager
. Standardmäßig ist für den Debug-Build dasDEBUG
Kompilierungssymbol definiert, dh Sie können Ihren nicht freigegebenen Code mit einem Zeilenumbruch versehen#if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif
.svn update
ihrem Arbeitsverzeichnis sein und waren auf dem Laufenden.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:
Rufen Sie die "Visual Studio 2010-Eingabeaufforderung" auf:
Dies ist erforderlich, damit unser Skript die XNA-Bibliotheken sowie alle erforderlichen Tools und Binärdateien finden kann.
Rufen Sie die MSBuild-Aufgabe für das Inhaltsprojekt (.contentproj) auf:
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)
Kopieren Sie die Ausgabe rekursiv in den Ordner, in dem die Binärdateien + das aktuelle Spiel im Repository gespeichert sind:
Ausführliche Informationen zu den Fahnen, können Sie in der Eingabeaufforderung aufrufen:
xcopy /?
. Die wichtigsten sind:/d
Nur 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./y
zum automatischen Überschreiben vorhandener Dateien, damit diese mit einer neueren Version aktualisiert werden können. Ich habe verwendet,xcopy
weil der normalecopy
Ordner meines Wissens nicht rekursiv kopieren kann - und wahrscheinlich strukturieren Sie den Inhalt in Ordnern und Unterordnern. Außerdem ist es besser als normalcopy
(viele verschiedene Flaggen).Rufen Sie auf,
pause
damit 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
quelle