Estou desenvolvendo um pequeno mecanismo de jogo 2D. Os caracteres têm um método de pintura que atualmente faz o seguinte:
- Calcule a nova posição do personagem de acordo com sua velocidade, etc.
- Atualize a célula da grade de colisão **
- Desenhe o personagem na nova posição
** Criei uma grade de colisão para reduzir o número de verificações de interseção
Agora, o algoritmo básico que pensei para detectar colisões é:
For Each Character
Check intersection with characters in surrounding 8 cells
Eu posso simplesmente colocar esse código no método paint. Mas aqui está o problema que antecipo.
Suponha que dois caracteres A e B estejam em células adjacentes na grade de colisão. Agora, conforme o algoritmo acima, na iteração do caractere A, ele detectará que colidiu com B. Na iteração para o caractere B, detectará que colidiu com A.
Mas tenho uma ideia de que, quando A detectar que colidiu com B, deve informar B que colidiu com A. Isso economizaria muitas comparações quando houver mais de dois atores colidindo. Mas não tenho certeza de como lidar com isso. Acho que, em vez de cada personagem checar sua colisão, devo checar a colisão dentro do loop do jogo.
Essa abordagem seria correta? Como você lidou com esse tipo de problema? Eu mesmo pensei na grade da colisão. Existem alternativas à lógica da grade de colisão?