![]() |
DelphiX - array of TImageSprite leeren
hi, ich hab ein array[0..200] of TImageSprite.
während des spiel wird alle 2 sekunden ein teil davon erzeugt (und nach 2 sekunden das nächste etc.). allerdings werden während des spiels auch einige zerstört (bla[x].dead;) . zum einen wenn sie aus dem bildschirm rausbewegt werden, und zum anderen wenn sie kollidieren. das heisst es ist möglich das beim klick auf "neu" (neu anfangen :mrgreen: ) bla[30],bla[32],bla[33] aktiv sind, die anderen noch nicht erzeugt, oder schon zerstört! nun die frage wie lösche ich diese aktiven, die anderen brauch ich ja nicht mehr löschen. bei mir kommt immer fehlermeldung! hoffentlich wars verständlich!? gruss haegar |
*mal nach oben schieben* :(
gruss haegar |
Hi Haeger,
versuch doch mal, ein zweites array vom Typ Boolean zu erschaffen array: Tod [0..200] of Boolean; Immer, wenn ein ImageSprite gelöscht wird, musst du nur die dazugehörige Variable Tod auf TRUE setzen. Bla[4].Dead; Tod[4] := TRUE; Wenn du nun die restlichen ImageSprites löschen willst (in einer for do Schleife), kannst du prüfen, ob ein Objekt bereits gelöscht wurde und lässt dieses dann nicht mehr löschen. for i := 0 to 200 do begin if not Tod[i] then Bla[i].Dead; end; Hoffentlich habe ich dein Problem richtig verstanden. Gruß Basti :dancer2: |
jo, du hast es genau auf den ounkt getroffen, denn die idee hatte ich auch schon, doch dachte ich ich frag mal, nicht das das so ein simples ding is, und ich da die übelsten kopfstände mache ;)
na gut dann werd ichs mal probieren ;) und die arrays sind dann richtig leer, so das ich dann wieder von vorne füllen kann (also durch dieses x.dead;)?? gruss haegar. |
Mit dem x[i].dead löscht du das TImageSprite und du kannst dieses Array wieder überschreiben, das stimmt.
Gruß Basti :dancer2: |
neues problem, wie bekomm ich denn den index von dem dazugehörigen tot[x] heraus?? ich hab ja allgemein für den Typ TAsteroid diese Kollisionsgeschichte, und da reicht ein dead; um den betreffenden asteroiden zu löschen, ohne jeglichen index.
gruss haegar |
Du musst ja irgendwie festlegen, in was für einem Index deine TAsteroids
erzeugt werden. Diesen Indexwert übergibst du einer Variable, die du im Typen TAsteroids deklarierst. type TAsteroid = class (TImageSprite) IndexCount: Integer; // die Varibale, mit der du denn Indexwert // im Array festhälst. procedure ............ ..... usw end; Und wenn du den Asteroiden erzeugst, übergib ihm den Befehl: Bal[4].IndexCount := 4; So kannst du festhalten, in welcher Position des Array der Asteroid gespeichtert wurde, und die Tod[x] Variable dem entsprechenden Asteroid zuordnen. Falls ich dein Problem falsch verstanden habe, musst du dein Problem noch mal anders darstellen. Hoffentlich konnte ich helfen. Gruß Basti :dancer2: |
tja mal sehen ob ich das richtig verstanden hab....
also das sieht bei mir folgendermassen aus (noch ausschnitt aus alter unit).
Delphi-Quellcode:
jetzt mal so wie ich mir das nun vorstelle (nach deiner aussage)
procedure TAsteroid.DoCollision(Sprite:TSprite; var Done:Boolean); //Kollision
begin if sprite is TSchuss then begin dead; //reicht aus um entsprechenden asteroide zu zerstören ... end; end;
Delphi-Quellcode:
meinste das etwa so??
procedure TAsteroid.DoCollision(Sprite:TSprite; var Done:Boolean); //Kollision
begin if sprite is TSchuss then begin tot[index]:=true; //tot:array [0..200] of boolean //index ist variable in TAsteroid dead; ... end; end; |
Genau!
Tod[IndexVariable] := TRUE; So kannst du auf die zu dem Kometen dazugehörige Tod-Variable zugreifen und varändern. Anschließend mit der for do Schleife testen, welche Tod-Variablen auf TRUE sind und diese dann nicht löschen. Gruß Basti :dancer2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 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