Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DelphiX DoCollision (https://www.delphipraxis.net/13924-delphix-docollision.html)

Igotcha 29. Dez 2003 12:08


DelphiX DoCollision
 
Hallo zusammen,

ich möchte bei der Mausberührung mit einem Sprite eine zusätzliche grafische Information in Form eines weiteren Sprites am Bildschirm anzeigen - befindet sich der Mauscursor nicht mehr auf dem Sprite soll die Zusatzinformation ausgeblendet werden.

Warum funktioniert folgender Code nicht?

CardSprite ist das Sprite, welches ein situationsabhängiges Bild zusätzlich anzeigt.

Delphi-Quellcode:
procedure TACard.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  inherited;
  if Sprite is TCursorSprite then
  begin
    //beep;
    frmMain.DXSCARD.Items.Clear;
    frmMain.DXSCARD.Items.Add;
    frmMain.DXSCARD.Items[0].Picture.loadfromfile(MYPFAD+fed+'\small\'+fnummer+'.jpg');
    frmMain.DXSCARD.Items[0].Name:='scard';
     frmMain.DXSCARD.Items.Restore;
    CardSprite.Image :=frmMain.DXSCARD.Items.Find('scard');
    CardSprite.Width:=90;
    CardSprite.Height:=127;
    CardSprite.X:=50;
    CardSprite.Y:=300;
    CardSprite.Visible:=true;
   end
   else
   CardSprite.Visible:=false;
end;
Die Routine funktioniert bis auf das Ausblenden des CardSprites

Delphi-Quellcode:
else
   CardSprite.Visible:=false;
wunderbar, denn nach einer ersten Collision ist CardSprite immer sichtbar. Es werden auch korrekt die Bilder geladen, nur bekomme ich, wenn sich die Maus nicht über einem TACard-Objekt befindet, das Sprite nicht unsichtbar.

Gruß Kay

Igotcha 29. Dez 2003 23:33

Re: DelphiX DoCollision
 
Oder anders gesagt, ich möchte ein OnMouseOver für ein Sprite realisieren.

Haegar 30. Dez 2003 09:54

Re: DelphiX DoCollision
 
ich bin mir jetzt nicht sicher, aber ist es möglich das diese prozedur beim verlassen (keine Kollision) gar nicht erst aufgerufen wird?
dann wäre es auch logisch, das er niemals in den "else-block" gelangt!

ciao haegar

Igotcha 30. Dez 2003 10:08

Re: DelphiX DoCollision
 
Zitat:

Zitat von Haegar
ich bin mir jetzt nicht sicher, aber ist es möglich das diese prozedur beim verlassen (keine Kollision) gar nicht erst aufgerufen wird?
dann wäre es auch logisch, das er niemals in den "else-block" gelangt!

Hmmm, das wäre natürlich eine mögliche Erklärung, aber ich dachte, DoMove löst auch immer ein DoCollision aus - zumindest, wenn im DoMove ein "Collision" steht. Und DoMove wird bei mir ja durch die Spriteengine im Timer ausgelöst.

Igotcha 30. Dez 2003 10:35

Re: DelphiX DoCollision
 
Also ich habe jetzt eine Lösung gefunden, verstehe sie aber nicht ;-)

Ich habe eine neue Variable bShowCardSprite eingeführt, welche im DoCollision wie folgt gesetzt wird:

Delphi-Quellcode:
procedure TACard.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  inherited;
  if (Sprite = MouseCursor) AND (Done<>true) then
  begin
    //beep;
    frmMain.DXSCARD.Items.Clear;
    frmMain.DXSCARD.Items.Add;
    frmMain.DXSCARD.Items[0].Picture.loadfromfile(MYPFAD+fed+'\small\'+fnummer+'.jpg');
    frmMain.DXSCARD.Items[0].Name:='scard';
     frmMain.DXSCARD.Items.Restore;
    CardSprite.Image :=frmMain.DXSCARD.Items.Find('scard');
    CardSprite.Width:=90;
    CardSprite.Height:=127;
    CardSprite.X:=50;
    CardSprite.Y:=300;
    CardSprite.Visible:=true;
    bShowCardSprite:=true;
    Done:=true;
   end
   else
    bShowCardSprite:=false;
end;
Im OnTimer steht dann:

Delphi-Quellcode:
procedure TfrmMain.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
 try
    DXDraw1.Surface.Fill( clwhite );
    ProcessGamestate;

    if bShowCardSprite=false then
      CardSprite.Visible:=false;

    DXSpriteENgine1.Dead;
    DXSpriteEngine1.Move(2);
    DXSpriteEngine1.Draw;
  except
    dxtimer1.Enabled:=false;
    messagedlg('An error has occurred',mterror,[mbok],0);
  end;
  dxdraw1.Flip;
end;
Und damit funktioniert es - ob es schön ist und warum es funktioniert, weiß ich nicht.

Gruß Kay


Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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