Kollisionsprüfung
Wenn Bewegungen geplant werden oder aufgrund bestimmter Aktionen
entschieden wird, ist es oftmals wichtig zu wissen, ob Kollisionen mit
anderen Objekten an bestimmten Stellen/Positionen bestehen. Folgende
Funktionen können dafür verwendet werden. All diese haben
drei Argumente gemeinsam:
Das Argument obj kann ein Objekt sein, das Schlüsselwort all, oder
die id einer Instanz.
Das Argument prec gibt an, die Prüfung präzise sein soll oder
nur auf der "bounding-box" der Instanz basiert. Präzise
Prüfung wird nur ausgeführt, wenn das sprite der Instanz es
aktiviert hat.
Das Argument notme kann auf wahr (true) gesetzt werden, um anzugeben,
dass die aufrufende Instanz nicht geprüft wird.
Alle diese Funktionen geben entweder die id von einer der beiden
kollidierenden Instanzen zurück oder sie melden einen negativen
Wert, wenn keine Kollision vorliegt.
collision_point(x,y,obj,prec,notme) Diese
Funktion prüft, ob an Punkt (x,y) eine Kollision mit Instanzen des
Objektes obj vorliegt.
collision_rectangle(x1,y1,x2,y2,obj,prec,notme) Diese
Funktion prüft, ob eine Kollision zwischen dem (gefüllten)
Rechteck mit den angegebenen gegenüberliegenden Ecken und
Instanzen des Objektes obj vorliegt. Beispielsweise kannst du sie
verwenden, um zu prüfen, ob ein Gebiet frei von Hindernissen ist.
collision_circle(xc,yc,radius,obj,prec,notme)Diese
Funktion prüft, ob eine Kollision zwischen dem (gefüllten)
Kreis mit Kreismittelpunkt an Position (xc,yc) mit gegebenem Radius und
Instanzen des Objektes obj vorliegt. Beispielsweise kannst du damit
überprüfen, ob ein Objekt dicht an einer bestimmten Stelle
liegt.
collision_ellipse(x1,y1,x2,y2,obj,prec,notme) Diese
Funktion prüft, ob eine Kollision zwischen der (gefüllten)
Ellipse mit den angegebenen gegenüberliegenden Ecken und Instanzen
des Objektes obj besteht.
collision_line(x1,y1,x2,y2,obj,prec,notme) Diese
Funktion prüft, ob eine Kollision zwischen dem Liniensegment von
(x1,y1) zu (x2,y2) und Instanzen des Objektes obj vorliegt. Dies ist
eine mächtige Funktion. Du kannst sie beispielsweise benutzen, um
zu prüfen, ob eine Instanz eine andere Instanz "sehen" kann, indem
Du prüfst, ob das Liniensegment zwischen den beiden eine Wand
schneidet.