Je développe un petit moteur de jeu 2D. Les personnages ont une méthode de peinture qui fait actuellement ce qui suit:
- Calculez la nouvelle position du personnage en fonction de sa vitesse, etc.
- Mettre à jour la cellule de la grille de collision **
- Dessinez le personnage à la nouvelle position
** J'ai créé une grille de collision pour réduire le nombre de contrôles d'intersection
Maintenant, l'algorithme de base que j'ai pensé pour détecter la collision est:
For Each Character
Check intersection with characters in surrounding 8 cells
Je peux simplement placer ce code dans la méthode de peinture. Mais voici le problème que j'anticipe.
Supposons que deux caractères A et B se trouvent dans des cellules adjacentes de la grille de collision. Maintenant, selon l'algorithme ci-dessus dans l'itération du caractère A, il détectera qu'il est entré en collision avec B. Dans l'itération pour le caractère B, il détectera qu'il est entré en collision avec A.
Mais j'ai une idée que lorsque A détecte qu'il est entré en collision avec B, il doit informer B qu'il est entré en collision avec A. Cela permettrait d'économiser beaucoup de comparaisons lorsqu'il y a plus de 2 acteurs en collision. Mais je ne sais pas comment gérer cela. Je pense qu'au lieu que chaque personnage vérifie sa collision, je devrais vérifier la collision à l'intérieur de la boucle de jeu.
Cette approche serait-elle correcte? Comment avez-vous géré ce genre de problème? J'ai pensé au truc de la grille de collision moi-même. Existe-t-il des alternatives à la logique de grille de collision?