Sto sviluppando un piccolo motore di gioco 2D. I personaggi hanno un metodo di pittura che attualmente effettua le seguenti operazioni:
- Calcola la nuova posizione del personaggio secondo la sua velocità, ecc.
- Aggiorna la cella della griglia di collisione **
- Disegna il personaggio nella nuova posizione
** Ho creato una griglia di collisione per ridurre il numero di controlli di intersezione
Ora l'algoritmo di base che ho pensato per rilevare la collisione è:
For Each Character
Check intersection with characters in surrounding 8 cells
Posso semplicemente inserire questo codice nel metodo paint. Ma ecco il problema che prevedo.
Supponiamo che due caratteri A e B si trovino nelle celle adiacenti nella griglia di collisione. Ora, secondo l'algoritmo sopra riportato nell'iterazione del carattere A, rileverà che si è scontrato con B. Nell'iterazione per il carattere B, rileverà che si è scontrato con A.
Ma ho idea che quando A rileva che si è scontrato con B, dovrebbe informare B che si è scontrato con A. Ciò risparmierebbe molti paragoni quando ci sono più di 2 attori in collisione. Ma non sono sicuro di come gestirlo. Penso che invece di ogni personaggio che controlla la sua collisione, dovrei verificare la collisione all'interno del circuito di gioco.
Questo approccio sarebbe corretto? Come hai gestito questo tipo di problema? Ho pensato alla cosa della griglia di collisione da solo. Esistono alternative alla logica della griglia di collisione?