Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [Andorra]: Zur Lauzeit erstelle Sprites finden (https://www.delphipraxis.net/124049-%5Bandorra%5D-zur-lauzeit-erstelle-sprites-finden.html)

Spiderpig_GER_15 13. Nov 2008 15:31


[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:
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;
Ich müsste doch eigentlich wie folgt nachschauen können ob sich unter dem Cursor eine wie oben erstelle Sprite befindet:

Delphi-Quellcode:
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;
Aber leider geht das nicht... Was soll ich tuen

MfG

Spiderpig

Die Muhkuh 13. Nov 2008 15:44

Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
 
Was geht nicht?

Spiderpig_GER_15 13. Nov 2008 15:50

Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
 
Delphi-Quellcode:
  If SpriteEngine.GetSpriteAt(Mouse.CursorPos.x,Mouse.CursorPos.Y) = >>>TMySprite<<< then
TMySprite wird nicht angenommen (incompatible types)

aber ich weiß nicht was da stattdessen hinsoll ?!

Die Muhkuh 13. Nov 2008 15:51

Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
 
Versuch mal:

Delphi-Quellcode:
If SpriteEngine.GetSpriteAt(Mouse.CursorPos.x,Mouse.CursorPos.Y) is TMySprite then

Spiderpig_GER_15 13. Nov 2008 15:53

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

Looper 13. Nov 2008 15:58

Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
 
und wenn du
Delphi-Quellcode:
If SpriteEngine.GetSpriteAt(Mouse.CursorPos.x,Mouse.CursorPos.Y) <> nil then
eingibst?

Die Muhkuh 13. Nov 2008 15:59

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?

Spiderpig_GER_15 13. Nov 2008 16:03

Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
 
also eigentlich dürfe sich nichts verschoben haben, ich probier mal <> aus. einen Moment ;)

Spiderpig_GER_15 13. Nov 2008 16:08

Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
 
Also, wenn ich das einfach so schreibe:

Delphi-Quellcode:
  If SpriteEngine.GetSpriteAt(Mouse.CursorPos.x,Mouse.CursorPos.Y) <> nil then
  begin
    showmessage('geht');
  end;
geht das erstmal Blindalrarm los wegen dem meinem Backgroundsprite.

Nehme ich den Background raus, reagiert es wieder nciht. Springt GetSpriteAt vllt nicht TImageSpriteEx an?

Spiderpig_GER_15 13. Nov 2008 16:09

Re: [Andorra]: Zur Lauzeit erstelle Sprites finden
 
hier ist der Quelltext der Funktion GetSpriteAt():

Delphi-Quellcode:
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;
wenn euch das hilft


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz