Como devo guardar e arquivos de configuração de usuário de carga para um jogo em C ++?

StackOverflow https://stackoverflow.com/questions/1652183

  •  22-07-2019
  •  | 
  •  

Pergunta

Eu preciso de uma maneira de salvar e configurações do usuário de carga para um jogo (controles, gráficos, etc.) para um arquivo. Eu quero fazer isso de uma forma multi-plataforma, e se eu tiver que usar bibliotecas, eu quero que eles tenham uma sintaxe bastante simples. Como faço para salvar e carregar arquivos de configuração, e que formato devo usar? XML e INI parecem popular, mas todos os analisadores que eu encontrei têm confundir sintaxe, e eu não tenho idéia por onde começar para obter o meu próprio analisador indo.

A propósito, os arquivos de configuração provavelmente não vai ficar muito complexo, portanto, algo leve e rápido seria melhor.

Um aparte -? Eu estava pensando sobre o uso de scripts para definir coisas como itens, mas seria uma linguagem de marcação como XML ser melhor ou uma linguagem de script (como AngelScript, que é o que eu estou usando) ser melhor

Foi útil?

Solução

Google Protocol Buffers

Há uma confusão de longa data penso eu, entre serialização e mensagens .

serialização

É geralmente de curta duração e envolve a passagem ao redor de objetos.

Como indicado no artigo, e COM CORBA são exemplos bem conhecidos dos seus usos.

Mensagens

É sobre a comunicação entre diferentes entidades.


O problema é que muitas pessoas, quando vêem um problema de mensagens simplesmente pensar:. Serialize e ser feito com ele

Mas isso não é adaptado.

serialização de um meio objeto que está sendo capaz de 'codificar' o objeto, e restaurá-lo ... O que acontece se de repente você mudar suas maneiras eo que era um objeto é agora 2, como você lidar com compatibilidade com versões anteriores?

O problema aqui é que se serialização funciona muito bem com estável modelo, qualquer alteração do modelo pode ser uma dor.

Mensagens por outro lado decorrelates a codificação de mensagens e decodificação do modelo atual, portanto, muda para o modelo apenas tem que ser tratada na codificação e decodificação da mensagem, eo modelo é liberto do peso da compatibilidade com versões anteriores.


Agora, para um arquivo de configuração, você provavelmente vai querer compatibilidade com versões anteriores. Em seguida, é no seu melhor interesse para eleger uma solução de mensagens.

Eu sugiro Google Protocol Buffers, porque é som e comprovada.

  1. Para a frente e compatibilidade com versões anteriores é fácil manipulados
  2. Pode gerar qualquer formato legível ou binário humana
  3. A mesma mensagem pode ser codificado / decodificado em uma ampla variedade de idiomas

Eu não tenho a presente porque 1. é importante. 2. significa que você pode simplesmente editar o arquivo manualmente para ajustá-lo, 3. significa que você pode facilmente código um GUI ou um script de verificação.

Outras dicas

Que tal fazer uma classe C ++ que representam a sua configuração e, em seguida, serializá-lo? Olhe, por exemplo, no aumento de serialização.

http://www.boost.org /doc/libs/1_40_0/libs/serialization/doc/index.html

Eu estou usando Lua, que é leve e funciona bem como um linguagem de configuração . Como passar dos anos eu começou a se mover mais e mais para os scripts Lua até tudo, mas o motor principal foi codificado em Lua. Na última iteração até mesmo a dinâmica do jogo são codificados na Lua usando chamadas de retorno com muito pouco sucesso no desempenho. Eu não estou dizendo que você deve fazer isso, mas Lua vai deixá-lo crescer e é muito fácil de implementar em C / C ++.

Eu preciso de uma maneira de salvar e configurações do usuário de carga para um jogo (controles, gráficos, etc.) para um arquivo.

Jogos usar normalmente formatos proprietários para armazenar informações de configuração, porque eles muitas vezes podem ser mal utilizados (pense em cortar-se um arquivo de configuração para aumentar o número de vidas peças que você tem ou a munição que você pode empregar). Tal informação sensível é muitas vezes escrito em binário e para uma boa medida criptografados. Se não houver essa informação que você precisa para armazenar que pode comprometer o jogo-play, é perfeitamente possível ir em frente com a / markup baseada formato legível baseado em texto / humano. formatos binários têm seu próprio conjunto de questões w.r.t plataformas etc (lookup SO para mensagens a este respeito).

Eu estava pensando sobre o uso de scripts para definir coisas como itens, mas seria uma linguagem de marcação como XML ser melhor ou uma linguagem de script (como AngelScript, que é o que eu estou usando) ser melhor?

XML é definitivamente uma boa escolha tendo em vista minhas observações na seção anterior. É legível, uma série de analisadores estão disponíveis gratuitamente (e também é fácil escrever um) etc. Scripting é uma besta completamente diferente. Você realmente precisa ter um script e controle de estruturas e funções? Esta é uma decisão de projeto novo, então seu até você para decidir.

Não há uma resposta certa. Para começar, um formato de texto / XML parece-me muito bem. Mas com o tempo e aumento da complexidade do jogo que você pode precisar se deslocar para uma forma DSL e binário.

Você pode estar interessado no mensagem classe que faz parte da minha rede biblioteca . Ele permite armazenar qualquer tipo de dados convenientemente, com tanto ou tão pouco hierarquia / estrutura como você deseja incluir. Os dados são serializado para um formato binário plataforma neutra. Existem APIs para C, C ++, Java, Python e C #, e é fácil de usar.

Eu tenho usado para armazenar arquivos de projeto bastante complexo por anos, e funcionou muito bem para mim.

Um monte de jogos tem armazenado essas configurações em um arquivo binário. Seria mais rápido do que XML mas hoje em dia eu não acho que isso é importante. Talvez explicar o problema que você está tendo com arquivos XML para que possamos ajudar.

IniParser - Fácil de usar, sintaxe ini padrão, C, mas trivial para embrulhar em uma classe .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top