Come impacchetti le risorse in un gioco quando ne hai troppe?


10

Di recente ho creato un clone di Space Invaders di base, in C ++, usando il framework Allegro 5. Dopo aver finito, mi sono reso conto di avere circa 10 sprite e 13 MB di DLL; alcuni giocatori non avevano nemmeno le DLL mingW, il che stava rendendo il gioco molto confuso.

Come impacchettare tutte le mie risorse in modo da poter aggiungere e rimuovere facilmente i dati al mio gioco e ridurre le dimensioni prese dalla risorsa, praticamente mettendole in un punto? Sto usando i blocchi di codice.


1
Come capisci il termine risorse? Risorse come immagini, suoni, ... o includi DLL in questo termine?
Christian Ivicevic,

Preferirei se potessi adattarmi anche alle DLL perché ne ho molte.
Bugster,

La mia prima idea sarebbe quella di trovare una libreria adatta come (abbastanza obsoleta ...) zziplibper archiviare tutte le mie solite risorse in un file zip e poi caricarle nel mio gioco attraverso una pipeline di contenuti personalizzati per il motore. Quello che stai sostanzialmente cercando all'inizio è un modo per caricare i file da un file zip in memoria per poterli usare nel tuo gioco. Per quanto riguarda le DLL, è abbastanza difficile perché di solito devono essere nella stessa directory dell'eseguibile o della directory Windowso System32che NON è raccomandata! Che ne dici di un archivio SFX da estrarre TEMPed eseguire da lì?
Christian Ivicevic,

3
Stai chiedendo come utilizzare un programma di installazione? Perché le DLL non sono risorse.
Nicol Bolas,

Risposte:


13

Sembra che ci siano due sfide che stai affrontando qui: distribuzione e packaging delle risorse.

Distribuzione

Raggruppa l'intera applicazione in directory come ritieni opportuno, quindi posiziona la directory di livello superiore in un file .zip. Distribuire quel file .zip. Quando i tuoi utenti estraggono lo zip, avranno una cartella con tutto ciò di cui hanno bisogno pronti per eseguire il gioco.

Come si posizionano i file?

  • I tuoi .dll di solito devono essere nella stessa directory dell'eseguibile (ci sono eccezioni, ma per semplicità ...)
  • I tuoi asset (immagini, audio) possono essere ovunque tu li voglia, anche se se li sposti in riferimento al tuo eseguibile dovrai modificare il tuo codice di caricamento delle risorse per tenerne conto.

Di solito faccio qualcosa del genere:

MyGame \ // directory di livello superiore contiene l'intero programma
  bin \ // dlls va qui insieme all'esempio compilato
  res \ // directory di livello superiore delle risorse di gioco
    musica\
    effetti sonori\   
    voce\
  cfg \ // file di configurazione predefiniti (le configurazioni dell'utente vanno nella directory dell'utente)
  MyGame.lnk // scorciatoia per exe compilato

Imballaggio patrimoniale

Puoi usare una sorta di libreria di compressione (zlib, lzo) per comprimere tutte le tue risorse di gioco (la directory res \ sopra) in un singolo file. Quindi è necessario utilizzare la stessa libreria di compressione per estrarre i contenuti delle risorse, in tempo reale, per caricare le risorse nel gioco.

Quindi cosa succede quando vuoi patchare le tue risorse? Quindi devi: compilare un file di risorse completamente nuovo e distribuirlo ai tuoi utenti (quindi essenzialmente stanno riscaricando ciò che già hanno, oltre alla manciata di aggiunte), oppure devi creare un programma di aggiornamento (un altro programma da mantenere ) e gestire il fatto che le cose potrebbero andare storte e il file delle risorse verrà danneggiato ...

Onestamente, non è esattamente banale farlo funzionare e non vedo il risultato nella tua situazione. Una semplice directory dovrebbe essere sufficiente per incapsulare i tuoi 10 sprite ed è molto più facile aggiungere e patchare le cose: basta scaricarle nella directory giusta e il gioco è fatto.

Costruire un installatore

Questo presuppone che tu stia prendendo di mira Windows ... una volta che hai giù sopra, puoi lavorare sulla costruzione di un programma di installazione per il tuo gioco. Eviterei a tutti i costi i metodi ClickOnce supportati da Visual Studio. E ' non è il vostro installatore tipico di Windows e viene fornito con un set di stranezze è di.

Dai un'occhiata a questa domanda StackOverflow : contiene una serie di collegamenti utili ai pacchetti di installazione che puoi usare. Molte persone in questi giorni sembrano apprezzare il WiX . Non l'ho mai usato da solo. Inoltre, AdvancedInstaller e InnoSetup sono entrambe scelte popolari.


1
Grazie per questa risposta, ora ho un'idea di base su come distribuire il mio gioco.
Bugster,

1
Non usare WiX. Ti farà male alla testa e ucciderà la tua famiglia.
Ray Dey,

1
C'è un'altra opzione: può esserci più di un pacchetto di asset. Qualcosa come "resources.pak, patch1.pak, patch1337.pak, .." sarebbe quindi un modo per archiviare i dati delle patch. Non sarebbe necessario modificare il pacchetto originale, basta rendere il motore in grado di rilevare e ordinare i pacchetti di patch.
snake5,

0

Potresti essere in grado di collegare staticamente alcune delle librerie invece di includere le DLL. Se e come è diverso per ogni libreria però.


-1

È possibile utilizzare un software come Enigma per comprimere i file e salvarli in un unico .dat. Dovresti cambiare la cartella del tuo launcher.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.