Eine einfache Kollisionsabfrage im 2-dimensionalen Bereich könnte so aussehen:
Beide Objekte sind Rechtecke. (Dein Schuss ist ein Rechteck mit Breite=1 und Höhe = 6)
Die Rechtecke können sich überschneiden oder nicht.
Ein Spezialfall der Überschneidung ist, wenn ein Rechteck komplett im anderen enthalten ist.
Glücklicherweise bietet Windows schon eine Funktion um zu Prüfen, ob sich zwei Rechtecke überschneiden.
Diese Funktion wird jetzt noch schön verpackt, damit sie leicht zu benützen ist:
Delphi-Quellcode:
function HasKollision(const A,B:TRect):Boolean;
var
union : TRect;
begin
Result := IntersectRect(union, A,B);
end;
Um die Kollision mit einem Image zu prüfen, bauen wir eine weitere Hilfsfunktion:
Delphi-Quellcode:
function KollisionMitImage(img:TImage; r : TRect):Boolean;
var
img_rect : TRect;
begin
if img.Visible then
begin
img_rect := img.ClientRect;
// Rechteck verschieben
OffsetRect(img_rect, img.Top, img.Left);
Result := HasKollision(img_rect, r);
end
else
Result := False; // Image war unsichtbar
end;