Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Sprite wird nicht unsichtbar (https://www.delphipraxis.net/21615-sprite-wird-nicht-unsichtbar.html)

Neutral General 5. Mai 2004 16:57


Sprite wird nicht unsichtbar
 
Ich habe einen Sprite vom Typ TSchwert und ich möchte das wenn man mit einem anderen Sprite das Schwert berührt dieses unsichtbar (Visible := false) wird. BEi mir kommt während der Laufzeit, wenn ich den Sprite berühre dieser Fehler :

"Zugriffsverletzung bei Adresse 0044163F im Modul 'MeinProgramm.exe' Schreiben von Adresse 0000001A"

Was mache ich falsch ?

Delphi-Quellcode:
procedure TSpieler.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  if sprite is TGegenstand then
    begin
      Form1.DXWaveList1.Items.Find('sound').Play(False);
      dead;
      Visible := false;  
    end;
  if sprite is TSchwert then
    begin
       Schwert.Visible := false;
    end;
end;
Bei der Brührung von TGegenstand wird der Spieler unsichtbar, aber wie mache ich das, wenn der Spieler gegen das Schwert läuft TSchwert unsichtbar wird ?

Muetze1 5. Mai 2004 18:32

Re: Sprite wird nicht unsichtbar
 
Moin!

Dann scheint deine Variable Schwert keine Instanz zu beinhalten. Nimm daher doch einfach das übergebene Sprite, welches doch die Eigenschaft Visible schon bietet, oder?

Delphi-Quellcode:
procedure TSpieler.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  if sprite is TGegenstand then
    begin
      Form1.DXWaveList1.Items.Find('sound').Play(False);
      dead;
      Visible := false;  
    end;
  if sprite is TSchwert then
    begin
       sprite.Visible := false;
    end;
end;
Wenn nicht und erst TSchwert diese Property einführt, dann so:

Delphi-Quellcode:
procedure TSpieler.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  if sprite is TGegenstand then
    begin
      Form1.DXWaveList1.Items.Find('sound').Play(False);
      dead;
      Visible := false;  
    end;
  if sprite is TSchwert then
    begin
       TSchwert(sprite).Visible := false;
    end;
end;
MfG
Muetze1

F.W. 21. Mai 2004 21:37

Re: Sprite wird nicht unsichtbar
 
Mein Problem ist: Mein Sprite bewegt sich, wenn ich bei ihm dead aufrufe, wird nur die Collision nicht mehr beachtet, alles andere läuft weiter. Und da jedesmal ein neues erzeugt wird, wenn das alte drauf geht, kann man 5-10 mal schießen, danach wird alles so langsam, das man den PC eigentlich neustarten müsste!

Wie kann ich das Sprite total auf Free setzen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.

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