Hallo igel!
Ich habe mal die „GetSpritesAt“ umgesetzt:
Delphi-Quellcode:
{Returns all sprites at the specified position}
procedure GetSpritesAt(const AX, AY : Integer; ASprites : TSpriteList); overload; virtual;
{Returns all sprites at the specified position and of a specified type}
procedure GetSpritesAt(const AX, AY : Integer; ASprites : TSpriteList; AClass : TSpriteClass); overload; virtual;
procedure TSprite.GetSpritesAt(const AX, AY: Integer; ASprites: TSpriteList;
AClass: TSpriteClass);
var
i: Integer;
Rect : TAdRect;
begin
if Assigned(ASprites) then
begin
ASprites.Clear; // Standard ?
for i := 0 to Items.Count - 1 do
begin
Rect := Items[i].BoundsRect;
if (AX >= Rect.Left) and (AX <= Rect.Right) and
(AY >= Rect.Top) and (AY <= Rect.Bottom) and
(Items[i] is AClass) then
begin
ASprites.Add(Items[i]);
end;
end;
end;
end;
procedure TSprite.GetSpritesAt(const AX, AY: Integer; ASprites: TSpriteList);
begin
GetSpritesAt(AX, AY, ASprites, TSprite);
end;
Ich weiß nicht, ob das leeren der Liste eine Art Standard ist? Ich habe mich übrigens für die Variante als Übergabeparameter entschieden, da damit die Verwaltung der Liste komplett an die "Mutterklasse" abgegeben wurde.
MfG
xZise