AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DelphiX - array of TImageSprite leeren
Thema durchsuchen
Ansicht
Themen-Optionen

DelphiX - array of TImageSprite leeren

Ein Thema von Haegar · begonnen am 13. Mär 2003 · letzter Beitrag vom 18. Mär 2003
Antwort Antwort
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#1

DelphiX - array of TImageSprite leeren

  Alt 13. Mär 2003, 16:26
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 ) 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
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#2
  Alt 14. Mär 2003, 18:08
*mal nach oben schieben*

gruss haegar
  Mit Zitat antworten Zitat
Basti

Registriert seit: 27. Feb 2003
19 Beiträge
 
Delphi 4 Professional
 
#3
  Alt 17. Mär 2003, 17:31
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
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#4
  Alt 17. Mär 2003, 17:53
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 Zitat antworten Zitat
Basti

Registriert seit: 27. Feb 2003
19 Beiträge
 
Delphi 4 Professional
 
#5
  Alt 17. Mär 2003, 18:52
Mit dem x[i].dead löscht du das TImageSprite und du kannst dieses Array wieder überschreiben, das stimmt.

Gruß
Basti
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#6
  Alt 17. Mär 2003, 20:14
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
  Mit Zitat antworten Zitat
Basti

Registriert seit: 27. Feb 2003
19 Beiträge
 
Delphi 4 Professional
 
#7
  Alt 18. Mär 2003, 14:37
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
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#8
  Alt 18. Mär 2003, 15:06
tja mal sehen ob ich das richtig verstanden hab....
also das sieht bei mir folgendermassen aus (noch ausschnitt aus alter unit).
Delphi-Quellcode:
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;
jetzt mal so wie ich mir das nun vorstelle (nach deiner aussage)
Delphi-Quellcode:
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;
meinste das etwa so??
  Mit Zitat antworten Zitat
Basti

Registriert seit: 27. Feb 2003
19 Beiträge
 
Delphi 4 Professional
 
#9
  Alt 18. Mär 2003, 15:27
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 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