Tratando Erros por Restrições e Excessões

Imagine: você programou tudo certinho e depois de vários testes sem problemas, aparece um valor estranho em uma variável. Não acontece sempre esse defeito, e por isso você não consegue prever como ocorre e até rastrear a causa do defeito pode levar alguns dias, principalmente se ele for causado por detalhes de código.

Um desses problemas ocorreu esses dias e fiquei tentando buscar a causa… perdi horas e não achei, então lembrei de um artigo que li, se me lembro bem, foi no Gamasutra, em que o homem estava tendo problemas com o personagem, que por uma falha da modelagem, não detectava a colisão com o chão em algumas partes. Eles tentaram e até remodelaram o mapa inteiro para tentar eliminar esse problema. Cronograma estourando e foi quando um deles tiveram uma brilhante idéia: o personagem jamais estará abaixo do chão, ou seja, se ele “cair” abaixo do chão, é só erguê-lo, ou seja, só adicionar alguns valores para o Y (ou Z depende do sistema de coordenadas) e problema resolvido.

No meu caso, uma variável que era definida com uma lógica de probabilidade estava, com uma frequência muito baixa, retornando NULL. Embora não afetasse vitalmente o jogo, era visível para o jogador. Como resolvi isso? Como é uma frequência baixa demais que ocorria, nada melhor que criar uma excessão: Se a variável é NULL, arrange um valor válido de outra forma. Claro que quero que ele funcione pela regra normal, mas quando o cronograma é apertado, improvise  uma lógica auxiliar e se sobrar tempo, corre atrás para corrigir o principal, pois como eu disse antes: pode ser uma busca que pode levar dias. Eu não desisti, deixei algumas saídas para mostrar as variáveis envolvidas caso essa falha apareça para poder analisar, mas enquanto não é possível ver essas falhas, que venham as gambiarras…

O que quero dizer não é para ficar fazendo gambiarras, lembre-se que um jogo deve ter uma codificação eficiente. O que deve fazer é pensar fora da lógica normal. No caso do artigo que falei, eles estavam esforçando para resolver pela lógica original: se detectar colisão com o chão, trate a colisão. Foi uma lógica falha, mas eles resolveram com uma outra lógica simples, criando uma simples restrição: O Y do personagem não deve ficar abaixo do Y do chão. Então fica a dica: Se não conseguir resolver o problema, pense se não tem como contornar de outra forma esse problema. Foca no efeito que ele está gerando e não na causa, mas claro, somente se realmente não ter tempo para correr atrás.

Publicado em: às janeiro 25, 2010 em 5:23 pm  Deixe um comentário  

O URI para trackback desta entrada é: http://gameprogrammerlife.wordpress.com/2010/01/25/tratando-erros-por-restricoes-e-excessoes/trackback/

Feed RSS para comentários sobre este post.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.