Para mecanismos de jogos personalizados, o que devo fazer se meus dados principais estiverem malformados ou ausentes?

27

Estou escrevendo um mecanismo personalizado para um jogo. Comecei este jogo bem antes de entender por que deveria usar o middleware, e ainda é muito longo para reescrever.

A grande maioria dos meus dados vem de arquivos externos e não me refiro apenas a ativos; Eu defino todos os meus objetos de jogo através de .JSON. Mas, infelizmente, sou humano; ocasionalmente, meus arquivos de dados são inválidos, ou altero o formato, mas esqueço de atualizar o arquivo, ou o próprio carregador é um buggy simples.

Se, por qualquer motivo, falhar uma tentativa de carregar algum tipo de ativo em um mecanismo personalizado, que opções tenho?

Esta não é uma duplicata de Como devo lidar com os recursos ausentes? , como essa pergunta é sobre ativos voltados para o usuário, como modelos ou texturas. Texturas ruins podem ser substituídas por um quadriculado, sons ruins com silêncio e texto ruim com "ERRO". Meu problema está nos dados críticos para a execução do jogo, como níveis, definições de objetos de jogo e layouts de GUI.

JesseTG
fonte
7
Eu uso uma abordagem semelhante para o meu jogo. Na verdade, criei um pequeno aplicativo utilitário para gerar meus arquivos de dados do jogo para evitar erros humanos - dessa forma, posso modificar os arquivos se quiser fazer alterações sem precisar escrever 100.000 linhas de JSON manualmente.
precisa saber é o seguinte
Você também pode executar seus dados através de um validador antes de carregá-los.
precisa saber é o seguinte
Meu JSON é pequeno o suficiente para gerá-lo automaticamente seria inútil. Além disso, um validador não ajudará se o JSON estiver ausente ou se houver um bug na coisa que deveria ser lida. Obrigado pelo pensamento, no entanto.
JesseTG

Respostas:

44

Registre um erro e saia normalmente.

Idealmente, exiba também um erro legível por humanos na tela. Deve haver um pipeline principal de funcionalidade codificada que funcione sem esses arquivos de dados. É o mesmo pipeline que carrega os arquivos de dados em primeiro lugar. Ele deve ser capaz de detectar quando esses arquivos de dados principais estão corrompidos ou com defeito e encerrar o aplicativo. Se os usuários pretendem modificar esses arquivos, não há muito o que fazer. Caso contrário, você precisará implementar uma estratégia de teste para garantir que esse tipo de corrupção não ocorra. Então você pode garantir que está liberando apenas arquivos de dados válidos.

MichaelHouse
fonte
12

Byte56 mencionou uma opção. Há pelo menos um outro:

Assuma os valores padrão e exiba um aviso.

Dependendo da natureza dos seus dados, pode ser perfeitamente aceitável assumir alguns valores padrão e avisar o usuário que "desde que o arquivo xxx não foi carregado, estamos usando um objeto aaaa genérico".

Polvo
fonte
6

Depende se isso acontece durante o desenvolvimento ou o lançamento.

Durante o desenvolvimento, você terá todos os tipos de coisas ausentes, erros e bagunças, constantemente, o tempo todo, e você pode até querer "aquecer" carregar ativos sob demanda ou substituir um ativo enquanto o jogo está em execução. Você pode editar scripts com o jogo em execução para testar um desempenho da IA ​​melhor ou algo assim.

É muito irritante se o programa mostra uma caixa de diálogo de erro e sai sempre, e você deve reiniciá-la, o que leva de 2 a 3 minutos. O objetivo no desenvolvimento é parar você (cujo tempo é o bem mais precioso) o mínimo possível.
Portanto, se, por exemplo, falta uma textura, você deseja ver algo como um tabuleiro de xadrez vermelho-branco, talvez com a palavra "ausente" escrita em cima como uma textura de substituição, por isso é óbvio que algo está estranho . Mas você não deseja que o jogo saia normalmente, nem quebre. Informações detalhadas sobre o que está faltando no seu arquivo de log são imensamente úteis.

Por outro lado, em uma versão, o conjunto completo de arquivos de ativos deveria idealmente [1] passar pelo seu pipeline de ativos automatizado. Isso precisa não ser muito mais do que um simples analisador que lê todos os seus JSONs e, em seguida, verifica se todos os módulos são consistentes em si, e verifica se todos os ativos que você faz referência estão realmente lá e depois fecha o conjunto de arquivos. de uma maneira conhecida (mas não necessariamente padrão) que é fácil para o seu mecanismo ler, opcionalmente adicionando algumas somas de verificação.

Você sabe que não pode haver falha porque seu pipeline verificou se tudo estava lá antes de você liberar o pacote para o usuário final. Portanto, se ocorrer uma falha, ocorreu um erro de transmissão ou é mais provável que o usuário esteja tentando trapacear. Nos dois casos, o programa deve exibir uma mensagem informando que os arquivos de ativos estão danificados e sair.

Como alternativa, você pode oferecer a opção de baixar uma cópia original dos ativos da Internet (se você tiver um servidor de download). Mas, para evitar um pesadelo no suporte ao cliente, pergunte antes de baixar gigabytes de dados.


[1] A realidade pode parecer diferente, você pode até encontrar ativos ausentes em títulos AAA cujos fabricantes "deveriam saber", mas eles geralmente têm prazos irrealistas e grandes equipes em mudança também. Idealmente, tudo o que você envia passa pelo pipeline automatizado e é garantido que está completo.

Damon
fonte