![]() |
Mehrere Objekte in einer Schleife erzeugen
Hi Leute ich würde gern sowas hier machen:
Code:
TLevel1 bis TLevel20 (oder mehr) sind alles Klassen vom Typ TLevel von dem auch das Array ist.
for i := 1 to LevelZahl do
Levels[i] := (TLevel + IntToStr(i)).Create; Geht das irgendwie? |
Mir ist leider keine Möglichkeit bekannt. Das hört sich aber auch nicht unbedingt nach einem durchdachten Konzept an. Sind die Level denn wirklich alle so unterschiedlich, dass jedes eine eigene Klasse benötigt?
...:cat:... |
Ich hab leider keine Idee wie ichs sonst machen soll (das mit den Klassen nicht das mit dem erstellen) in den Klassen steht drin was bei einem Klick passiert (ist für ein Point-n-Klick-Adventure) außerdem sind da alle Variablen von dem Level drin.
Im der Klasse steht also sowas wie
Code:
also unterscheiden sich die LevelKlassen schon stark.
if HaveRedKey then OpenDoor(2)
Das mit dem Erstellen kann ich zur Not auch "von Hand" machen also
Code:
aber für die Levelklassen fällt mir nichts anderes ein
Levels[1] := TLevel1.Create;
Levels[2] := TLevel2.Create; Levels[4] := TLevel3.Create; ... |
Warum einfach wenns auch kompliziert geht.
Versuch mal das und hin und wieder F1 :mrgreen:
Delphi-Quellcode:
Liste : TObjectlist; // irgendwo public
Level : TLevel; // irgendwo lokal wenn möglich for i := 0 to sovielLevelwieduhast -1 do begin Level := TLevel.create; / so sind natürlich alle vom gleichen Typ Liste.add(Level); end; |
Ich kann nicht alle vom gleichen typ machen weil ja in jedem was anderes passiert (andere Variablen + if verschachtelungen)
Aber mal abgesehen davon was für einen Vorteil hat die ObjectList gegenüber einem array of TOjekt?? |
Moin Flogo,
eine Idee noch: Benutze immer die gleich Klasse, und übergebe beim Constructor die erforderliche Nummer als Paramter. So kannst Du dann innerhalb der Kompo anhand des Parameters entscheiden, was passieren soll. Das würde vor allem dann Sinn machen, wenn die Masse der Methoden bei allen TLevelXX Klassen ansonsten gleich ist. |
Einfach 'TObjectlist' in Delphi eingeben und F1 drücken, dann siehst du die Vorteile (ich könnte auch copy-paste machen :mrgreen: )
Array of TObject = Prozedurale Programmierung mit dem Deckmantel der OOP! (etwas übertrieben aber stimmt im Grunde). Noch schlimmer sind Records und Co! |
gut ich hab versucht auf die TObjectList umzusteigen
aber bei meinem array konnte ich sagen
Code:
Bei der Liste geht das nicht mehr. brauch ich da ne eigene function, die mir das richtige object und die richtige klasse zurückgibt?
Levels[5].load
|
Also erstmal, die Hilfe kann man über F1 aufrufen, F1 befindet sich neben der Taste 'ESC'. Da du damit offensichtlich Probleme damit hast hier ein Copy-Paste aus meiner Hilfe :mrgreen:
Mit TObjectList können Sie eine Liste von Objekten speichern und verwalten. Die Komponente stellt Eigenschaften und Methoden für das Hinzufügen, Löschen, Umsortieren, Suchen, Zugreifen und Sortieren von Objekten zur Verfügung. Ist die Eigenschaft OwnsObjects auf true gesetzt (Voreinstellung), verwaltet TObjectList den Speicher seiner Objekte, das heißt, ein Objekt wird freigegeben, wenn sein Index neu zugewiesen wird, wenn es mit der Methode Delete, Remove oder Clear aus der Liste entfernt wird oder wenn die Instanz TObjectList selbst aufgelöst wird. |
Ok Ok Ich hab die Hilfe schon gefunden (Die F1 Taste auch. war neben der F2 Taste :wink: )
Aber hast du meinen Thread gelesen??
Code:
Levels.Items[2].load; //Levels ist eine TObjectList //funktioniert nicht Levels[2].load; //Hier ist Levels ein Array of TLevel //funktioniert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 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