![]() |
[Andorra]: Zur Lauzeit erstelle Sprites finden
hi
Ich erstelle zur Laufzeit (OnKlick) ein Sprite:
Delphi-Quellcode:
TMySprite = class(TImageSpriteEx)
protected procedure DoMove(TimeGap: double); override; procedure DoDraw; override; // procedure DoCollision(Sprite: TSprite; var Done: boolean); override; public Info: String; procedure Klick; procedure GetInfo(Sender: TObject; var Key: Char); constructor Create(AParent: TSprite); override; destructor Destroy; override; end;
Delphi-Quellcode:
Ich müsste doch eigentlich wie folgt nachschauen können ob sich unter dem Cursor eine wie oben erstelle Sprite befindet:
procedure TForm1.Set_Sprite( XX: Integer; YY: Integer; kind: string );
begin with TMySprite.Create( Form1.SpriteEngine ) do begin X:= get_Location( XX - Form1.Left - 20 ) * 20 + ( 0 - SpriteEngine.X ); Y:= get_Location( YY - Form1.Top - 40) * 20 + ( 0 - SpriteEngine.Y ); Z:= 1; Image:= ImageList.Find(kind); Info:='1'; end; end;
Delphi-Quellcode:
Aber leider geht das nicht... Was soll ich tuen
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin If SpriteEngine.GetSpriteAt(Mouse.CursorPos.x,Mouse.CursorPos.Y) = TMySprite then showmessage('geht'); end; MfG Spiderpig |
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Was geht nicht?
|
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Delphi-Quellcode:
TMySprite wird nicht angenommen (incompatible types)
If SpriteEngine.GetSpriteAt(Mouse.CursorPos.x,Mouse.CursorPos.Y) = >>>TMySprite<<< then
aber ich weiß nicht was da stattdessen hinsoll ?! |
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Versuch mal:
Delphi-Quellcode:
If SpriteEngine.GetSpriteAt(Mouse.CursorPos.x,Mouse.CursorPos.Y) is TMySprite then
|
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
okay, danke, jetzt ist der fehler weg und das programm lässt sich starten, aber die meldung wird nicht ausgelöst wenn sich so ein sprite unter dem cursor befindet
|
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
und wenn du
Delphi-Quellcode:
eingibst?
If SpriteEngine.GetSpriteAt(Mouse.CursorPos.x,Mouse.CursorPos.Y) <> nil then
|
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Er will aber nur auf sein eigenes Sprite reagieren. ;-)
Passen denn die Koordinaten so oder muss man noch ein Offset der Engine dazuaddieren? |
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
also eigentlich dürfe sich nichts verschoben haben, ich probier mal <> aus. einen Moment ;)
|
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Also, wenn ich das einfach so schreibe:
Delphi-Quellcode:
geht das erstmal Blindalrarm los wegen dem meinem Backgroundsprite.
If SpriteEngine.GetSpriteAt(Mouse.CursorPos.x,Mouse.CursorPos.Y) <> nil then
begin showmessage('geht'); end; Nehme ich den Background raus, reagiert es wieder nciht. Springt GetSpriteAt vllt nicht TImageSpriteEx an? |
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
hier ist der Quelltext der Funktion GetSpriteAt():
Delphi-Quellcode:
wenn euch das hilft
function TSprite.GetSpriteAt(X, Y: integer): TSprite;
var i:integer; rect:TAdRect; begin result := nil; for i := Items.Count - 1 downto 0 do begin rect := Items[i].BoundsRect; if (X >= rect.Left) and (X <= rect.Right) and (Y >= rect.Top) and (Y <= rect.Bottom) then begin result := Items[i]; break; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz