Ich mache das bei 2D-Spielen immer so:
Code:
Type TDirection = (dirNone, dirUp, dirDown, dirLeft, dirRight);
Var Dir : TDirection;
...
und frage bei einer Collision immer die aktuelle Laufrichtung und einen
Rand vom Spieler ab.
Beipiel:
Wenn der Spieler nach
rechts läuft, dann wird gefragt, ob ausschließlich
der
RECHTE RAND des Spielers die Kiste berührt. Ist dies der Fall,
dann wird die Laufbewegung Dir
von dirRight auf dirNone gesetzt. Da beim
Laufen nach links logischerweise dementsprechend nur der linke Rand
abgefragt wird, könnte man problemlos von der Kiste abhauen.
Selbst dann, wenn man sich mit dem rechten Rand berührt.