Jak pakować zasoby w grze, gdy masz ich zbyt wiele?

10

Niedawno stworzyłem podstawowy klon Space Invaders, w C ++, używając frameworka Allegro 5. Po zakończeniu zdałem sobie sprawę, że mam około 10 duszków i bibliotek DLL o wartości 13 MB; niektórzy gracze nie mieli nawet bibliotek DLL mingW, co czyniło grę bardzo zagmatwaną.

Jak spakować wszystkie zasoby w taki sposób, że mogę łatwo dodawać i usuwać dane z mojej gry oraz zmniejszyć rozmiar zasobów, umieszczając je w jednym miejscu? Używam bloków kodu.

Bugster
źródło
1
Jak rozumiesz termin zasoby? Zasoby takie jak obrazy, dźwięki, ... czy w tym terminie dołączasz biblioteki DLL?
Christian Ivicevic,
Wolałbym również pasować do bibliotek DLL, ponieważ mam ich wiele.
Bugster,
Moim pierwszym pomysłem byłoby znaleźć odpowiednią bibliotekę, taką jak (dość przestarzała ...), zziplibdo przechowywania wszystkich moich zwykłych zasobów w pliku zip, a następnie załadowania ich do mojej gry przez niestandardowy potok zawartości silnika. Zasadniczo szukasz na początku sposobu na załadowanie plików z pliku zip do pamięci, aby móc z nich korzystać w grze. Jeśli chodzi o biblioteki DLL, jest to dość trudne, ponieważ zwykle muszą znajdować się w tym samym katalogu co plik wykonywalny lub katalog Windowslub System32katalog, który NIE jest zalecany! Co powiesz na archiwum SFX do wyodrębnienia TEMPi uruchomienia z niego?
Christian Ivicevic,
3
Czy pytasz o sposób korzystania z instalatora? Ponieważ biblioteki DLL nie są zasobami.
Nicol Bolas,

Odpowiedzi:

13

Wygląda na to, że stoją przed nami dwa wyzwania: dystrybucja i pakowanie zasobów.

Dystrybucja

Spakuj całą aplikację do katalogów według własnego uznania, a następnie umieść katalog najwyższego poziomu w pliku .zip. Rozpowszechnij ten plik .zip. Gdy użytkownicy rozpakują zip, będą mieli folder ze wszystkim, czego potrzebują, gotowi do uruchomienia gry.

Jak umieszczasz swoje pliki?

  • Pliki .dll zwykle muszą znajdować się w tym samym katalogu co plik wykonywalny (są wyjątki, ale dla uproszczenia ...)
  • Twoje zasoby (obrazy, audio) mogą być wszędzie tam, gdzie chcesz, ale jeśli przeniesiesz je w odniesieniu do pliku wykonywalnego, będziesz musiał zmodyfikować kod ładujący zasoby, aby to uwzględnić.

Zwykle robię coś takiego:

Katalog MyGame \ // najwyższego poziomu zawiera cały program
  bin \ // dlls idź tutaj wraz ze skompilowanym exe
  res \ // katalog najwyższego poziomu zasobów gry
    muzyka\
    efekty dźwiękowe\   
    głos\
  cfg \ // domyślne pliki konfiguracyjne (user-configs przejdź do katalogu użytkownika)
  MyGame.lnk // skrót do skompilowanego pliku exe

Pakowanie aktywów

Możesz użyć pewnego rodzaju biblioteki kompresji (zlib, lzo), aby skompresować wszystkie zasoby gry (powyższy katalog res \) do jednego pliku. Następnie musisz użyć tej samej biblioteki kompresji, aby wyodrębnić zawartość zasobów w czasie rzeczywistym, aby załadować zasoby do gry.

Co się wtedy stanie, gdy chcesz załatać swoje aktywa? Następnie musisz albo: skompilować zupełnie nowy plik zasobów i rozesłać go użytkownikom (aby w gruncie rzeczy ponownie pobierali to, co już mają, plus garść dodatków), albo musisz zbudować aktualizator (inny program do obsługi ) i poradzić sobie z tym, że coś może pójść nie tak, a plik aktywów zostanie uszkodzony ...

Szczerze mówiąc, nie jest to wcale trywialne, aby działało i nie widzę korzyści w twojej sytuacji. Prosty katalog powinien wystarczyć do enkapsulacji 10 duszków i dużo łatwiej jest dodawać i łatać rzeczy: wystarczy pobrać je do odpowiedniego katalogu i gotowe.

Budowanie instalatora

Zakłada się, że celujesz w system Windows ... kiedy już będziesz mieć powyższą wersję, możesz pracować nad zbudowaniem instalatora dla swojej gry. Za wszelką cenę unikałbym metod ClickOnce obsługiwanych przez Visual Studio. To nie jest typowy instalator systemu Windows i ma własny zestaw dziwactw.

Spójrz na to pytanie StackOverflow - zawiera zestaw pomocnych łączy do pakietów instalatora, których możesz użyć. Obecnie wiele osób lubi WiX . Nigdy sam tego nie użyłem. Ponadto popularne są zarówno AdvancedInstaller, jak i InnoSetup .

Szyfrować
źródło
1
Dzięki za tę odpowiedź, teraz mam podstawowy pomysł, jak powinienem rozpowszechniać swoją grę.
Bugster,
1
Nie używaj WiX. To zrani twoją głowę i zabije twoją rodzinę.
Ray Dey,
1
Jest jeszcze jedna opcja - może istnieć więcej niż jeden pakiet zasobów. Coś w rodzaju „resources.pak, patch1.pak, patch1337.pak, ..” byłoby wówczas sposobem na przechowywanie danych łatek. Nie byłoby potrzeby modyfikowania oryginalnego pakietu, wystarczy, że silnik będzie w stanie wykrywać i zamawiać pakiety łatek.
snake5,
0

Możliwe, że możesz połączyć statycznie niektóre biblioteki zamiast dołączać biblioteki dll. Jeśli i jak różni się dla każdej biblioteki.

Matthew R.
źródło
-1

Możesz użyć oprogramowania takiego jak Enigma, aby spakować swoje pliki i zapisać je w jednym pliku .dat. Musisz zmienić folder swojego programu uruchamiającego.

Dev
źródło