Detectar colisão com objetos retangulares é bastante fácil. Sou capaz de escrever jogos simples baseados em blocos. Agora, quero aprender a escrever jogos não baseados em blocos nos quais os objetos podem não ser retangulares, por exemplo, uma montanha.
Suponha que eu queira um terreno irregular com colinas e montanhas. Como armazeno a forma do terreno? Além disso, como detecto as colisões de tais objetos desiguais?
collision-detection
Biscoito
fonte
fonte
Respostas:
Você pode fazer isso de várias maneiras:
Uma delas é usar um teste de colisão aproximado usando colisão com caixa delimitadora (semelhante ao que você está fazendo) e, se isso for aprovado, execute um teste de colisão fino usando a detecção perfeita de pixels.
Outro pode ser o uso de formas delimitadoras, mas apenas as circundam a área que você deseja colidir, ou seja, um hitbox e executa a detecção de interseção.
fonte
A forma do terreno é geralmente armazenada como matriz, o chamado "mapa de altura":
Você pode suavizar ou criar alguns detalhes fractais nele (geralmente quando as dimensões da matriz são pequenas).
Não faça colisões manualmente, você pode ter problemas com velocidade, penetrações ...
Use polígonos convexos Box2D para roletes laterais (Terra Escaldada). Para RPG de cima para baixo, como jogos ODE, Havok, Newton , Bullet ... parecem ter suporte para mapas de altura, às vezes até nativamente.
fonte