function TKreis.KollisionsTest(XPos, YPos, Größe: Integer): Boolean;
Var UmgebungsPixel: Colorref;
Radius, i, XConst, YConst, XZen, YZen, XRand, YRand: Integer;
R, G, B: Byte;
begin
XConst:=XPos;
YConst:=YPos;
for i := 1
to 8
do
begin
XZen:=XConst+(Größe
div 2);
// Zentrum des
YZen:=YConst+(Größe
div 2);
// Kreises
Radius:=(Größe
div 2);
// Test ob Zentraler Punkt des Kreises stimmt
{SelectObject(DC,GetStockObject(DC_PEN));
SetDCPenColor(DC, RGB(255, 0, 0));
Ellipse(DC, XZen, YZen, XZen+2, YZen+2);}
//
case i
of
1 :
begin
XRand:=XZen+Radius;
YRand:=YZen;
end;
2 :
begin
XRand:=XZen-Radius;
YRand:=YZen;
end;
3 :
begin
YRand:=YZen+Radius;
XRand:=XZen;
end;
4 :
begin
YRand:=YZen-Radius;
XRand:=XZen;
end;
5 :
begin
XRand:=Round( XZen+ sqrt( ( (sqr(Radius) ) / 2 )) );
YRand:=Round( YZen+ sqrt( ( (sqr(Radius) ) / 2 )) );
end;
6 :
begin
XRand:=Round( XZen+ sqrt( ( (sqr(Radius) ) / 2 )) );
YRand:=Round( YZen- sqrt( ( (sqr(Radius) ) / 2 )) );
end;
7 :
begin
XRand:=Round( XZen- sqrt( ( (sqr(Radius) ) / 2 )) );
YRand:=Round( YZen+ sqrt( ( (sqr(Radius) ) / 2 )) );
end;
8 :
begin
XRand:=Round( XZen- sqrt( ( (sqr(Radius) ) / 2 )) );
YRand:=Round( YZen- sqrt( ( (sqr(Radius) ) / 2 )) );
end;
end;
// Test ob kollisionspunkte stimmen
{SelectObject(DC,GetStockObject(DC_PEN));
SetDCPenColor(DC, RGB(0, 0, 255));
Ellipse(DC, XRand, YRand, XRand+2, YRand+2);}
//
UmgebungsPixel:=Windows.GetPixel(
DC, XRand, YRand);
R:= GetRValue(UmgebungsPixel);
G:= GetGValue(UmgebungsPixel);
B:= GetBValue(UmgebungsPixel);
if (R=124)
and (G=252)
and (B=0)
then
begin
result:= true;
end;
end;
end;