Estou criando um jogo de tiro em 2D lateral e estou tendo alguns problemas com a detecção de colisão para as balas. Tudo, incluindo os marcadores, são objetos com seus próprios polígonos / métodos de atualização.
O problema é que os marcadores passam rápido e, a 60 quadros por segundo (no que o jogo é executado), uma bala costuma pular através de uma parede - já que se move mais do que a largura da parede durante o intervalo de atualização - e continue feliz, pois os polígonos nunca se sobrepõem.
O que é que eu posso fazer sobre isto? A única coisa que consegui sugerir é desenhar uma linha da posição antiga para a nova posição e fazer a detecção de colisão, mas o desenho de linha para detecção de colisão é recomendado pela documentação do slick2d. Como posso resolver isso?
Respostas:
As abordagens padrão são (escolha uma):
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.
fonte
Se você deseja que suas balas se comportem como objetos físicos realistas (por exemplo, suas balas são mais parecidas com flechas ou pedras de uma catapulta do que com tiros), então você também pode tentar aumentar a frequência de suas atualizações físicas.
Portanto, enquanto seu jogo pode rodar com 60 quadros por segundo, sua simulação física pode ser executada a 120 atualizações por segundo (aqui está o onipresente artigo sobre correção de timestep, que explica uma boa configuração física que pode ser executada em velocidade diferente da do loop de renderização).
Obviamente, aumentar o intervalo de atualização no mecanismo de física colocará uma carga maior na CPU. Portanto, essa abordagem só é sensata se seus projéteis não estiverem se movendo muito rapidamente (o que eu estava assumindo, pois você é capaz de dizer que seus projéteis estão se movendo em arco).
fonte