Ok, quindi questo è un problema che sto cercando di capire da un po 'di tempo. Il mio è un gioco platform in 2D con un mondo fatto di tessere (di solito) immobili e folletti mobili, che usano entrambi AABB per rappresentare le loro hitbox. Questo gioco NON è basato sulla griglia a causa di alcune complicazioni con lo spostamento di strati di tessere.
Riesco a rilevare le collisioni e capire facilmente la profondità della collisione. Uso il "metodo dell'asse più superficiale" per determinare in che modo risolvere una collisione tra lo sprite e la piastrella. Se lo sprite è più profondo in orizzontale che in verticale, la direzione da risolvere è su o giù. Se lo sprite è più profondo in verticale che in orizzontale, la direzione da risolvere è sinistra o destra.
Questo è abbastanza semplice e funziona abbastanza bene. Cioè, fino a quando uno sprite non si scontra con più di una tessera. Poiché, per loro natura, ogni collisione deve essere controllata separatamente, diverse collisioni possono avere una direzione diversa in cui risolvere. Ad esempio, se uno sprite sta cercando di attraversare una fila di tessere, per una trama si intersecano con la tessera successiva che la profondità orizzontale è inferiore alla profondità verticale. Mentre la collisione dice "risolvi a sinistra", verrà respinta e rimarrà bloccata in un angolo.
Ho riflettuto su questo problema, acceso e spento, per un po 'di tempo, e diverse soluzioni sono arrivate a me, ma tutte hanno dei difetti. Potrei contrassegnare alcuni lati come irraggiungibili, ma senza un motore basato su griglia, determinare "irraggiungibilità" è notevolmente complesso, soprattutto con lo spostamento di strati di tessere sempre una possibilità.
Un altro possibile metodo sarebbe quello di prevedere le collisioni prima che si verifichino e "ripensare" il movimento fino al punto della collisione, suppongo, ma non sono sicuro di come funzioni la matematica.
Sento che mi manca qualcosa di incredibilmente ovvio, soprattutto perché i giochi degli anni '80 hanno già risolto questo problema.