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.