Como detectar colisão com objetos não retangulares em jogos 2D?

7

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?

Biscoito
fonte
Você pode encontrar esta questão e suas respostas úteis: gamedev.stackexchange.com/questions/71800/...
assíncronos

Respostas:

3

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.

Casey
fonte
2
Como executar um teste de colisão fino usando a detecção perfeita de pixels?
Cracker
0

A forma do terreno é geralmente armazenada como matriz, o chamado "mapa de altura":

height[X][Y]

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.

user712092
fonte