Ich überprüfe die Kollision für einen Platformer-Charakter, wie in # 1 gezeigt. Die roten Punkte sind die Pixel, die markiert sind, und die grauen Linien geben die Achsen an, zu denen sie gehören. Ich mag die Ergebnisse, die ich erhalte, wenn ich die Kollision auf diese Weise überprüfe (im Vergleich zum Begrenzungsrahmen). Alles funktioniert genau so, wie ich es gerne hätte, bis auf ein Problem: die Erkennung von Quetschungen.
In den folgenden Bildern steht das hellblaue Kästchen für den Boden, das orangefarbene Kästchen für ein Objekt und die Pfeile für die Bewegungsrichtung.
Die einfache Lösung zum Erkennen, wann der Spieler niedergeschlagen ist, besteht darin, zu prüfen, ob die Kollisionspunkte auf den gegenüberliegenden Seiten beide ausgelöst haben. Wenn dies der Fall ist, wird der Spieler niedergeschlagen. In # 2 sehen Sie ein normales Crush-Szenario. Der Spieler ist am Boden und die oberen Kollisionspunkte schneiden sich mit dem fallenden Objekt. Dies löst einen Schwarm aus.
# 3, 4 und 5 präsentieren problematische Szenarien. In # 3 bewegt sich der Spieler auf das Objekt zu, das sich nach oben bewegt. Ein rechter Kollisionspunkt trifft auf das Objekt, verursacht eine Kollision und stoppt den Spieler.
Wenn sich das Objekt weiter nach oben bewegt und der Spieler sich weiter nach rechts bewegt (wie in # 4 gezeigt), löscht das Objekt den rechten Kollisionspunkt des Spielers und der Spieler bewegt sich nach rechts. Nachdem dies geschehen ist, schneidet das Objekt nun einen oberen Kollisionspunkt, was zu einem unerwünschten vertikalen Quetschen führt.
Ein ähnliches Szenario ist in # 5 dargestellt. Zwei Objekte sind so weit voneinander entfernt, dass die unteren Kollisionspunkte gelöscht werden und der Spieler fallen kann, aber nicht so weit, dass die seitlichen Kollisionspunkte gelöscht werden und ein unerwünschtes horizontales Quetschen verursacht wird.
Ich habe mir Gedanken über eine Lösung gemacht, aber nichts, was ich mir ausgedacht habe, hat besonders gut funktioniert. Deshalb frage ich mich, ob jemand da draußen eine Idee oder einen Einblick in die Lösung dieser Probleme hat.
Um eine gewisse Verwirrung zu beseitigen, befänden sich die roten Kollisionspunkte innerhalb des Sprites und die grauen Linien wurden nur verwendet, um die relevante Achse für jeden Kollisionspunkt zu kennzeichnen. Wenn das Sprite des Charakters beispielsweise ein einfaches grünes Quadrat wäre, würden die Kollionspunkte ungefähr so aussehen: