As abordagens padrão são (escolha uma):
- Aumente a largura do seu limite E / OU reduza a velocidade máxima da sua bala para que ele nunca possa pular através de uma parede em uma única atualização (é necessário um pouco de Pitágoras para descobrir as distâncias máximas / larguras mínimas dos limites);
- Realize a detecção contínua de colisões (CCD), geralmente através de radiodifusão para detectar colisões com superfícies lineares (2) ou planas (3D) à frente do objeto em movimento. Isso é mais caro, mas é uma solução mais completa. A transmissão de raios em linhas 2D é bastante básica, mas neste caso é necessário definir todos os seus limites como polígonos de borda reta.
Nesse caso, você pode modelar suas balas como raios - se isso se encaixa na aparência do seu jogo, como no left4kdead . Dessa forma, você não precisa aproximar as balas como raios, porque elas já são raios. Do ponto de vista da aparência, isso pode parecer decente se você desenhar a linha com um ponto mais brilhante no final da bala ou apenas desenhar a linha como um gradiente de claro (final da bala) a escuro (final da cauda), dando uma aparência de movimento.
Concordo que, na maioria das circunstâncias, o uso de gráficos para detecção de colisão é um pouco equivocado, no entanto, a detecção de colisão com pixel perfeito é exatamente isso e é uma técnica aceita. Acho que tudo depende do que você deseja alcançar e com que rapidez. Se você não precisa de um jogo muito rápido com muitos corpos + ação, vá em frente. Caso contrário, é melhor usar uma das abordagens descritas acima.