Como você empacota recursos em um jogo quando você tem muitos deles?

10

Recentemente, criei um clone básico do Space Invaders, em C ++, usando a estrutura Allegro 5. Depois que terminei, percebi que tinha cerca de 10 sprites e 13 MB de DLLs; alguns dos jogadores nem tinham as DLLs mingW, o que tornava o jogo muito confuso.

Como empacotar todos os meus recursos de forma que eu possa adicionar e remover dados facilmente ao meu jogo e reduzir o tamanho do recurso, basicamente colocando-os em um único local? Eu estou usando codeblocks.

Bugster
fonte
1
Como você entende o termo recursos? Recursos como imagens, sons, ... ou você inclui DLLs neste termo?
Christian Ivicevic
Eu preferiria se eu pudesse instalar DLLs também porque tenho muitos deles.
Bugster 10/09/12
Minha primeira idéia seria encontrar uma biblioteca adequada como a (bastante desatualizada ...) zziplibpara armazenar todos os meus recursos habituais em um arquivo zip e carregá-los no meu jogo através de um pipeline de conteúdo personalizado para o mecanismo. O que você está procurando basicamente no começo é uma maneira de carregar arquivos de um arquivo zip na memória para poder usá-los em seu jogo. Em relação às DLLs, é bastante difícil, porque elas geralmente precisam estar no mesmo diretório que o executável ou o Windowsou System32dir que NÃO é recomendado! Que tal um arquivo SFX para extrair TEMPe executar a partir daí?
Christian Ivicevic
3
Você está perguntando sobre como usar um instalador? Porque DLLs não são recursos.
Nicol Bolas

Respostas:

13

Parece que há dois desafios que você enfrenta aqui: distribuição e embalagem de ativos.

Distribuição

Empacote seu aplicativo inteiro em diretórios como achar melhor e, em seguida, coloque o diretório de nível superior em um arquivo .zip. Distribua esse arquivo .zip. Quando seus usuários extraírem o zip, eles terão uma pasta com tudo o que precisam, prontos para executar o jogo.

Como você coloca seus arquivos?

  • Suas .dlls geralmente precisam estar no mesmo diretório que o executável (há exceções, mas por uma questão de simplicidade ...)
  • Seus ativos (imagens, áudio) podem estar onde você quiser, mas se você os mover em referência ao seu executável, precisará modificar o código de carregamento de recursos para levar isso em consideração.

Eu costumo fazer algo assim:

O diretório de nível superior MyGame \ // mantém todo o programa
  bin \ // dlls vão aqui junto com o exe compilado
  res \ // diretório de nível superior dos recursos do jogo
    música\
    efeitos sonoros\   
    voz\
  cfg \ // arquivos de configuração padrão (user-configs vão no diretório user)
  MyGame.lnk // atalho para exe compilado

Embalagem de Ativos

Você pode usar algum tipo de biblioteca de compactação (zlib, lzo) para compactar todos os recursos do jogo (o diretório res \ acima) em um único arquivo. Então você precisa usar a mesma biblioteca de compactação para extrair o conteúdo de seus recursos, em tempo real, para carregar seus ativos no jogo.

Então, o que acontece quando você deseja consertar seus ativos? Em seguida, você deve: compilar um arquivo de ativos totalmente novo e distribuí-lo aos seus usuários (para que eles estejam essencialmente baixando novamente o que eles já têm, mais as poucas adições), ou você precisa criar um atualizador (outro programa para manter ) e lide com o fato de que as coisas podem dar errado e seu arquivo de ativos será corrompido ...

Honestamente, não é exatamente trivial fazer isso funcionar e não vejo o resultado da sua situação. Um diretório simples deve ser suficiente para encapsular seus 10 sprites e é muito mais fácil adicionar e corrigir coisas: basta fazer o download para o diretório certo e pronto.

Construindo um instalador

Isso pressupõe que você esteja mirando no Windows ... depois de concluir o procedimento acima, você poderá criar um instalador para o seu jogo. Eu evitaria a todo custo os métodos ClickOnce suportados pelo Visual Studio. É não o seu instalador típico do Windows e vem com seu próprio conjunto de peculiaridades.

Dê uma olhada nesta pergunta do StackOverflow - ela contém um conjunto de links úteis para os pacotes do instalador que você pode usar. Muitas pessoas hoje em dia parecem gostar do WiX . Eu nunca o usei. Além disso, AdvancedInstaller e InnoSetup são escolhas populares.

Cifra
fonte
1
Obrigado por esta resposta, agora tenho uma idéia básica de como devo distribuir meu jogo.
Bugster
1
Não use o WiX. Isso machucará sua cabeça e matará sua família.
Raio Dey
1
Há outra opção - pode haver mais de um pacote de ativos. Algo como "resources.pak, patch1.pak, patch1337.pak, .." seria uma maneira de armazenar dados do patch. Não seria necessário modificar o pacote original, apenas torne o mecanismo capaz de detectar e solicitar pacotes de patches.
precisa saber é o seguinte
0

Você pode vincular estaticamente algumas das bibliotecas em vez de incluir as DLLs. Se e como é diferente para todas as bibliotecas.

Matthew R
fonte
-1

Você pode usar um software como o Enigma para compactar seus arquivos e salvá-los em um único .dat. Você precisaria alterar a pasta do seu iniciador.

Dev
fonte