Como eu estou no processo de criação de um jogo 3D em c ++, fiquei imaginando o que seria mais benéfico ao lidar com os recursos do jogo em relação ao armazenamento. Eu já vi alguns jogos terem um único arquivo de ativo compactado com tudo e outros com muitos pequenos arquivos compactados.
Se eu tivesse muitos arquivos individuais, não precisaria carregar um arquivo grande de uma só vez e consumir memória, mas o código teria que procurar arquivos quando o nível carregar para encontrar todos os arquivos corretos necessários.
Não é necessário procurar arquivos ao lidar com um arquivo grande, mas, novamente, o que dizer de todos os ativos não necessários no momento que seriam carregados com o arquivo único?
Eu também poderia ter um arquivo de ativos para cada nível, mas como lidar com ativos compartilhados
Isso está me incomodando há um tempo, então me diga quais outras vantagens e desvantagens existem para as duas maneiras de fazer as coisas.
fonte
Respostas:
Nos pontos de desempenho e armazenamento, um único arquivo de recurso é uma solução mais benéfica (no entanto, na prática, nem sempre é realmente perceptível). A desvantagem é que é mais difícil atualizar e gerenciar.
A IMO geralmente não é tão importante, basta usar o que for mais conveniente para você, é realmente apenas um detalhe técnico que não deve ser considerado até que você realmente observe alguns problemas.
fonte
Arquivos descompactados tornam mais fácil para o usuário editar e substituir arquivos, tornando o jogo muito mais fácil de modificar. Isso pode ser visto como uma vantagem ou desvantagem, dependendo da sua atitude em relação à modificação.
Do ponto de vista do desempenho: carregar muitos arquivos pequenos do disco rígido pode ser muito mais lento que um único e grande, porque a desfragmentação de um sistema de arquivos geralmente tenta evitar a divisão de arquivos grandes, mas muitos arquivos pequenos o mesmo diretório pode estar espalhado por todo o disco. Portanto, quando você carrega milhares de arquivos pequenos, a unidade pode ter que procurar muito. Mas, por outro lado, o uso de arquivos pode tornar mais caro a obtenção de arquivos individuais dentro dos arquivos (dependendo de como seus arquivos são estruturados internamente), portanto, você deve tentar agrupar arquivos que geralmente são necessários.
De uma perspectiva de manutenção: a menos que você tenha uma ferramenta para fazer atualizações incrementais em seus arquivos de pacotes, seus patches ficarão muito maiores quando você precisar substituir pacotes inteiros para corrigir um arquivo individual.
fonte
Normalmente, um pacote seria mais rápido, no entanto, nem sempre é tão conveniente, como Petr disse. Uma maneira de combater isso, no entanto, é tornar seu mecanismo capaz de carregar arquivos soltos e compactar arquivos. Em seguida, no modo de depuração, carregue arquivos soltos e, no modo de liberação, carregue de um pacote
fonte