Zitat:
Das muss man nun für jeden Punkt des zu testenden Objektes machen
Nein das ist Unsinn, das muss nur für jedes Objekt gemacht werden, nicht für jeden Punkt. Du brauchst nur die linke obere ecke angeben.
Zitat:
Was man mit PtInRect macht ist Pixelweise rumfrickeln
nein, nein. Du hast mich anscheind immer noch nicht richtig verstanden.
Hier mal ein Beispiel, wie ich diese Funktion einsetzte:
Delphi-Quellcode:
function TPluto2SpriteManger.N_Collision(const ax, ay: Integer;
const aEvent: Boolean; const aPixelcheck: boolean): TPluto2DSprite;
var
i:Integer;
sp:TPluto2DSprite;
p:TPoint;
r1:TRect;
begin
sp:=nil; p:=Point(ax,ay); r1:=Engine.GameFehld;
// Schauen ob die Positions Angabe im Spielb Rect Liegt
if (PtInRect(r1,p)) then begin
for i:=0 to fItems.Count-1 do begin
// p:=Point(ax+Items[i].Width,ay+Items[i].Height);
if PtInRect(Items[i].GetR,p) then begin
if (not items[i].NoCollision) and (items[i].visible) then begin
sp:=Items[i];
//break;
end;
end;
end; // for i
end;
if (aEvent) and (Assigned(Engine.onCollision) ) then begin
Engine.onCollision(nil, sp);
end;
result:=sp;
end; // TPluto2SpriteManger.N_Collision
Ganz verstehe ich deine Methode immer noch nicht.