So, und wenn wir schon beim Fiddelkram sind:
1. Wieso heißt das 'XinRange', wenn doch in der Funktion gar kein 'X' vorkommt?
2. Selbst bei 'LeftInRange' blieben noch Zweifel, ob es das ist, was die Funktion prüft.
3. Und was sind das für magische Zahlen '30' und '26'?
Mein Refactoring würde so aussehen:
Delphi-Quellcode:
Function InRange (aNumber, aLowBound, aHighBound : Integer) : Boolean;
Begin
Result := (aNumber >= aLowBound) and (aNumber <= aHighBound);
End;
Function PointInImage (aPoint : TPoint; aImage : TImage) : Boolean;
Begin
// Ich gehe mal davon aus, das die '30' die Breite und Höhe des Bildes sind
Result := InRange (aPoint.X, aImage.Left, aImage.Left + aImage.Width)
and InRange (aPoint.Y, aImage.Top, aImage.Top + aImage.Height)
End;
Function SpriteInImage (aSprite, aImage : TImage) : Boolean;
// Ich gehe davon aus, das die '26' die Breite und Höhe des Sprites sind
Begin
Result := PointInImage (aSprite.BoundsRect.TopLeft)
Or PointInImage (aSprit.BoundsRect.BottomRight);
End;
...
for i:= 1 to anzahl do begin
if existiert[i] then
if SpriteInImage (Image2, geister[i]) then begin
geister[i].free;
existiert[i]:=false;
end;
end;
Kann aber auch sein, das ich den Code nicht verstanden habe. Wär' ja nicht das erste Mal