![]() |
[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; |
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Hast du den überhaupt deinen Sprite in items hinzugefügt ???
|
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Folgendes sollte gehen:
Delphi-Quellcode:
@frantron
var
tmp_sprite: TSprite; begin tmp_sprite := AdSpriteEngine.GetSpriteAt(X, Y); if (tmp_sprite <> nil) and (tmp_sprite is TMySprite) then begin ShowMessage('Buh!'); end; Die Items werden automatisch in die Liste eingefügt |
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Lala, sorry :oops: :oops:
Es lag daran das die Koordinaten nicht auf Fenster umgerechnet waren. Jetzt geht es:
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin If SpriteEngine.GetSpriteAt(X, Y) is TMySprite then begin showmessage('oops'); end; end; |
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Wenn ich schon was zu Sprites und auswählen gefragt hab, könnt ihr mir vielleicht ein weiteres Mal helfen?:
Delphi-Quellcode:
Ich möchte mit diesem Code die Sprite ermitteln auf die ich geklickt habe:
TMySprite = class(TImageSpriteEx)
protected procedure DoMove(TimeGap: double); override; procedure DoDraw; override; // procedure DoCollision(Sprite: TSprite; var Done: boolean); override; public Info: String; // <=== Da will ich drauf zu greifen wenn ich auf die Sprite geklickt hab! procedure Klick; procedure GetInfo(Sender: TObject; var Key: Char); constructor Create(AParent: TSprite); override; destructor Destroy; override; end;
Delphi-Quellcode:
Und bei showmessage will ich den String Info von TMySprite ausgeben. Wie geht das?
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin If SpriteEngine.GetSpriteAt(X, Y) is TMySprite then begin showmessage('oops'); end; end; So nicht:
Delphi-Quellcode:
MfG
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin If SpriteEngine.GetSpriteAt(X, Y) is TMySprite then begin showmessage(SpriteEngine.GetSpriteAt(X, Y).Info); end; end; Spiderpig |
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Du musst das Sprite casten:
Delphi-Quellcode:
showmessage((SpriteEngine.GetSpriteAt(X, Y) as TMySprite).Info);
|
Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
Danke
Funktioniert Superb! :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 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