Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [DelphiX] Nach umsotierung Sprites weg (https://www.delphipraxis.net/73201-%5Bdelphix%5D-nach-umsotierung-sprites-weg.html)

Neutral General 13. Jul 2006 15:34


[DelphiX] Nach umsotierung Sprites weg
 
Hi,

Isn bisschen komischer Titel aber mir ist nix besseres eingefallen :|
Also mit dieser Procedure Teile ich eine ObjectListe auf und verlege die Objecte dadrin in drei andere Objectlisten:

Delphi-Quellcode:
Kartenstapel: TKarten; // TKarten = class(TObjectlist)
Spieler: Array[0..3] of TKarten;
Delphi-Quellcode:
procedure TForm1.GiveKarten;
var i: Integer;
    z: Integer;
begin
  while KartenStapel.Count > 0 do begin
   for i:= 0 to 3 do begin
     if Kartenstapel.Count = 0 then exit;
     z:= random(Kartenstapel.Count);
     Spieler[i].Add(Kartenstapel.Items[z]);
     Kartenstapel.Items[z].AnimStart := Kartenstapel.Items[z].AnimStart + 1;
     if Kartenstapel.Items[z].AnimStart = 2 then Kartenstapel.Delete(z);
   end;
   Application.ProcessMessages;
  end;
end;
AnimStart benutze ich nur zum zählen.. das ist jetzt nur am Anfang so. Also das heißt das jede Karte zweimal existiert nachher. Weil eine Karte zweimal in eine Objectliste eingefügt werden kann.

So die Items der Objectlisten sind vom Typ TImageSprite.. Und nachdem ich die Procedure ausgeführt hab sind die nicht mehr in meiner SpriteEngine drin... Kann man da was gegen machen ? Bzw wie bekomm ich die da wieder rein :(

Gruß
Neutral General

marabu 13. Jul 2006 16:32

Re: [DelphiX] Nach umsotierung Sprites weg
 
Hi,

du hast den Kartenstapel vermutlich mit Create() erzeugt - dabei ist dann OwnsObjects = True und beim Delete(z) wird dann das Objekt zerstört. Nimm den constructor Create(False) und alles wird gut.

Grüße vom marabu

Neutral General 13. Jul 2006 19:56

Re: [DelphiX] Nach umsotierung Sprites weg
 
Mh gut jetzt sind die Bilder wieder/noch in der Engine. Aber komischerweise malt er sie trotzdem nicht :(
Also zuerst lade ich die Karten in den Kartenstapel.

Wenn ich dann ne/die Karte(n) malen will
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var i: Integer;
begin
  for i:= 0 to 23 do begin
   Kartenstapel.Items[i].Image := DXImageList1.Items[i];
   Kartenstapel.Items[i].Height := Kartenstapel.Items[i].Image.Height;
   Kartenstapel.Items[i].Width := Kartenstapel.Items[i].Image.Width;
   if i <> 23 then Kartenstapel.Items[i].Visible := false;
  end;
  DXDraw1.Surface.Fill(0);
  DXSpriteEngine1.Draw;
  DXDraw1.Flip;  
end;
funktioniert das.

Wenn ich jetzt die Karten ausgebe und die dann folgendermaßen malen will klappts nicht:
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var i: Integer;
begin
// ShowMessage(IntToStr(DXSpriteEngine1.Engine.Count)); = 24
 for i:= 0 to 11 do begin
   // Image ist schon festgelegt...
   Spieler[0].Items[i].Height := Spieler[0].Items[i].Image.Height;
   Spieler[0].Items[i].Width := Spieler[0].Items[i].Image.Width;
   Spieler[0].Items[i].x := i*Spieler[0].Items[i].Width;
   Spieler[0].Items[i].y := 10;
   Spieler[0].Items[i].Visible := true;
 end;
 DXDraw1.Surface.Fill(0);
 DXSpriteEngine1.Engine.Draw;
 DXDraw1.Flip;
end;
Warum funktioniert das denn jetzt bitte nicht mehr -.-

Gruß
Neutral General


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