Ordnen Sie den Test der Regel zu
Vergleichen Sie bei achsenausgerichteten Rechtecken die linke, rechte, obere und untere Ausdehnung jedes Objekts. Überlappung tritt auf, wenn sich die Intervalle auf beiden Achsen schneiden. Vergleichen Sie bei Kreisen den Mittelpunktsabstand mit der Summe der Radien. Ein Gitterspiel kann Geometrie vollständig vermeiden, indem es prüft, ob zwei Akteure dieselbe Zelle beanspruchen.
Erstellen Sie eine kleine Diagnoseszene mit zwei farbigen Formen und blenden Sie die zugehörigen Kollisionsbereiche ein. Testen Sie bei jedem Paar Kantenkontakt, teilweise Überlappung und einen knappen Vorbeigang ohne Kollision. Legen Sie fest, ob sich berührende Kanten als Kollision gelten, und verwenden Sie diese Regel überall einheitlich, damit Bewegung und Wertung nicht voneinander abweichen.
Vermeiden Sie es, schnelle Kreuzungen zu verpassen
Ein schnelles Objekt kann sich bei einem Update auf der einen Seite einer dünnen Wand und beim nächsten bereits auf der anderen Seite befinden. Kleinere feste Simulationsschritte können helfen, sind aber nicht die einzige Lösung. Wenn die Bewegung im Verhältnis zur Hindernisdicke groß ist, testen Sie eine überstrichene Strecke oder ein vergrößertes Ziel.
Gibt es viele Objekte, verwerfen Sie zunächst Paare, die nicht nahe beieinander sein können, etwa mithilfe eines groben Rasters oder räumlicher Zellen. Führen Sie die detaillierten Tests dann nur für die Kandidaten aus. Messen Sie, bevor Sie diese Struktur hinzufügen: Bei einigen Dutzend Entitäten sind direkte Paarprüfungen möglicherweise leichter zu warten und völlig ausreichend.
Fragen zu Erkennung von Spielkollisionen
Müssen Hitboxen mit den Sprite-Umrissen übereinstimmen?
Normalerweise nicht. Ein etwas nachsichtigeres Rechteck oder ein Kreis kann dafür sorgen, dass sich die Steuerung gerechter anfühlt. Zeigen Sie Hitboxen während der Entwicklung an und passen Sie sie an die beabsichtigte Regel und die Erwartungen der Spieler an.
Kann Canvas mir sagen, ob zwei Sprites kollidieren?
Canvas bietet Pfadtests wie isPointInPath(), mit denen sich prüfen lässt, ob ein Punkt in einem gezeichneten Pfad liegt. Allgemeine Kollisionsregeln für Spielobjekte definiert Canvas jedoch nicht. Halten Sie die Simulationsgeometrie explizit und unabhängig von der Darstellung.
Weiterlesen
Etwas nicht mehr aktuell? Korrektur melden