Wie packst du Ressourcen in ein Spiel, wenn du zu viele davon hast?

10

Ich habe kürzlich einen einfachen Space Invaders-Klon in C ++ mit dem Allegro 5-Framework erstellt. Nachdem ich fertig war, stellte ich fest, dass ich ungefähr 10 Sprites und DLLs im Wert von 13 MB hatte. Einige der Spieler hatten nicht einmal die mingW-DLLs, was das Spiel sehr verwirrend machte.

Wie packe ich alle meine Ressourcen so, dass ich meinem Spiel problemlos Daten hinzufügen und daraus entfernen kann, und um die Größe der Ressource zu verringern, platziere ich sie im Grunde genommen an einer Stelle? Ich benutze Codeblöcke.

Bugster
quelle
1
Wie verstehen Sie den Begriff Ressourcen? Assets wie Bilder, Töne, ... oder schließen Sie DLLs in diesen Begriff ein?
Christian Ivicevic
Ich würde es vorziehen, wenn ich auch DLLs anpassen könnte, weil ich viele davon habe.
Bugster
Meine erste Idee wäre, eine geeignete Bibliothek wie die (ziemlich veraltete ...) zziplibzu finden, um alle meine üblichen Assets in einer Zip-Datei zu speichern und sie dann über eine benutzerdefinierte Inhaltspipeline gegen die Engine in mein Spiel zu laden. Grundsätzlich suchen Sie am Anfang nach einer Möglichkeit, Dateien aus einer Zip-Datei in den Speicher zu laden, um sie in Ihrem Spiel verwenden zu können. In Bezug auf die DLLs ist es ziemlich schwierig, da sie sich normalerweise im selben Verzeichnis wie die ausführbare Datei oder das Windowsoder System32Verzeichnis befinden müssen, was NICHT empfohlen wird! Wie wäre es mit einem SFX-Archiv, TEMPdas von dort extrahiert und ausgeführt werden kann?
Christian Ivicevic
3
Fragen Sie nach der Verwendung eines Installationsprogramms? Weil DLLs keine Ressourcen sind.
Nicol Bolas

Antworten:

13

Anscheinend stehen Sie hier vor zwei Herausforderungen: Vertrieb und Verpackung von Assets.

Verteilung

Packen Sie Ihre gesamte Anwendung nach Belieben in Verzeichnisse und platzieren Sie das Verzeichnis der obersten Ebene in einer ZIP-Datei. Verteilen Sie diese ZIP-Datei. Wenn Ihre Benutzer die Zip-Datei extrahieren, haben sie einen Ordner mit allem, was sie zum Ausführen des Spiels benötigen.

Wie platzieren Sie Ihre Dateien?

  • Ihre DLLs müssen sich normalerweise im selben Verzeichnis wie die ausführbare Datei befinden (es gibt Ausnahmen, aber der Einfachheit halber ...)
  • Ihre Assets (Bilder, Audio) können sich an einem beliebigen Ort befinden. Wenn Sie sie jedoch in Bezug auf Ihre ausführbare Datei verschieben, müssen Sie den Code zum Laden von Ressourcen ändern, um dies zu berücksichtigen.

Normalerweise mache ich so etwas:

Das Verzeichnis der obersten Ebene von MyGame \ // enthält das gesamte Programm
  bin \ // dlls gehen hier zusammen mit der kompilierten exe
  res \ // Spielressourcen Verzeichnis der obersten Ebene
    Musik\
    Soundeffekte\   
    Stimme\
  cfg \ // Standardkonfigurationsdateien (Benutzerkonfigurationen werden im Benutzerverzeichnis gespeichert)
  MyGame.lnk // Verknüpfung zur kompilierten exe

Asset-Verpackung

Sie können eine Art Komprimierungsbibliothek (zlib, lzo) verwenden, um alle Ihre Spielressourcen (das obige Verzeichnis res \) in einer einzigen Datei zu komprimieren. Dann müssen Sie dieselbe Komprimierungsbibliothek verwenden, um den Inhalt Ihrer Ressourcen in Echtzeit zu extrahieren und Ihre Assets in Ihr Spiel zu laden.

Was passiert dann, wenn Sie Ihre Assets patchen möchten? Dann müssen Sie entweder: eine ganz neue Assets-Datei kompilieren und diese an Ihre Benutzer verteilen (damit diese im Wesentlichen das, was sie bereits haben, sowie die Handvoll Ergänzungen erneut herunterladen), oder Sie müssen einen Updater erstellen (ein anderes zu wartendes Programm) ) und damit umgehen, dass etwas schief gehen kann und Ihre Asset-Datei beschädigt wird ...

Ehrlich gesagt ist es nicht gerade trivial, dass dies funktioniert, und ich sehe keine Auszahlung in Ihrer Situation. Ein einfaches Verzeichnis sollte ausreichen, um Ihre 10 Sprites zu kapseln, und es ist viel einfacher, Dinge hinzuzufügen und zu patchen: Sie müssen sie nur in das richtige Verzeichnis herunterladen und fertig.

Installieren eines Installationsprogramms

Dies setzt voraus, dass Sie auf Windows abzielen. Sobald Sie die oben genannten Schritte ausgeführt haben, können Sie daran arbeiten, ein Installationsprogramm für Ihr Spiel zu erstellen. Ich würde um jeden Preis die von Visual Studio unterstützten ClickOnce-Methoden vermeiden. Es ist kein typisches Windows-Installationsprogramm und verfügt über eigene Macken.

Schauen Sie sich diese StackOverflow-Frage an - sie enthält eine Reihe hilfreicher Links zu Installationspaketen, die Sie verwenden können. Viele Leute scheinen heutzutage WiX zu mögen . Ich habe es selbst nie benutzt. Darüber hinaus sind AdvancedInstaller und InnoSetup beliebte Optionen.

Chiffre
quelle
1
Vielen Dank für diese Antwort. Jetzt habe ich eine grundlegende Idee, wie ich mein Spiel verteilen soll.
Bugster
1
Verwenden Sie kein WiX. Es wird deinen Kopf verletzen und deine Familie töten.
Ray Dey
1
Es gibt noch eine andere Option: Es kann mehr als ein Asset-Paket geben. Etwas wie "resources.pak, patch1.pak, patch1337.pak, .." wäre dann eine Möglichkeit, Patch-Daten zu speichern. Das Originalpaket muss nicht geändert werden. Die Engine kann lediglich Patch-Pakete erkennen und bestellen.
Schlange5
0

Möglicherweise können Sie einige der Bibliotheken statisch verknüpfen, anstatt die DLLs einzuschließen. Ob und wie ist das für jede Bibliothek anders.

Matthew R.
quelle
-1

Sie können eine Software wie Enigma verwenden, um Ihre Dateien zu packen und in einem einzigen .dat zu speichern. Sie müssten den Ordner Ihres Launchers ändern.

Dev
quelle