![]() |
[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:
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.
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; 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 |
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 |
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:
funktioniert das.
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; Wenn ich jetzt die Karten ausgebe und die dann folgendermaßen malen will klappts nicht:
Delphi-Quellcode:
Warum funktioniert das denn jetzt bitte nicht mehr -.-
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; Gruß Neutral General |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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