Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Erzeugen einer unbestimmten Anzahl von Objekten (https://www.delphipraxis.net/34871-erzeugen-einer-unbestimmten-anzahl-von-objekten.html)

maddddi 29. Nov 2004 15:33


Erzeugen einer unbestimmten Anzahl von Objekten
 
Für mein deszeitiges Projekt Simtower/Towermanager wollte ich eine Klasse (TEinwohner) eines Einwohners des Turms erstellen.

Somit könnte jeder Einwohner seperat gesteuert werden und indeviduelle Eigenschaften, wie "Hunger", "Schlaf", oder der gleichen haben.

Im fertigen Spiel sollen bis zu 20.000 Einwohner leben können. Meine Frage ist, wie man eine unbestimmte Anzahl von Einwohnern bzw. Objekten der Klasse TEinwohner erzeugen kann.

Dies wäre hilfreich, da ich es vermeiden möchte bei jedem Programmstart 20.000 Objekte der Klasse TEinwohner zu Createn. Es sollen also nur soviele Objekte von TEinwohner im Speicher sein, wie zur Zeit wirklich Einwohner in dem Turm.


Ich hoffe, dass ich mich verständlich ausdrücken konnte und das ich die richtige Rubrik für meine Frage gefunden habe.

jim_raynor 29. Nov 2004 15:39

Re: Erzeugen einer unbestimmten Anzahl von Objekten
 
Wo ist denn dein Problem. Um die ganzen Objekte zu verwalten kannst du zum Beispiel eine TList oder ein Array of TEinwohner benutzen.

Mit Einwohner:=TEinwohner.Create kannst du einen neuen zur Laufzeit erzeugen, und zwar dann, wenn er gebraucht wird. Anschliessend kannst du den in den Verweis in der Liste speichern und später über eine Schleife darauf zugreifen.

_Sebastian_ 29. Nov 2004 15:41

Re: Erzeugen einer unbestimmten Anzahl von Objekten
 
Guck dir mal die klasse TList an.
Darin kann man recht einfach Objekte verwallten und im gegensatz zu einem dynamischen array legt man sich nicht auf einen typen fest. Du kannst also z.b. deine abgeleiteten klassen da ebenfalls mit reinpacken.

Wie es damit allerdings bei 20K objekten aussieht weiss ich allerdings nicht. Aber ich denke mal nicht großartig anders als bei anderen möglichkeiten.

maddddi 29. Nov 2004 15:47

Re: Erzeugen einer unbestimmten Anzahl von Objekten
 
Erstmal danke für die schnelle Antwort. :)

Wenn ich einen statischen Array nehme, also:

Testarray: Array[1..20000]of TEinwohner;

Belegt der Array dann auch für die Indexe, die noch nicht Created wurden Speicherplatz, oder nur für die Createten?

dizzy 29. Nov 2004 15:48

Re: Erzeugen einer unbestimmten Anzahl von Objekten
 
Eine Liste ist dynamischer und eleganter, bei einem Array hat man das weiche kissen des indizierten Zugriffs. Der nutzt dir aber auch nur etwas, wenn man nicht anhand von Daten der Objekte zugreifen will, sondern den Index schon kennt. Ansonsten ist das Suchen in beidem gleich langsam.

Um riesige Objektmengen effizient bereit zu stellen böte sich ein binärer Suchbaum an (sofern man ein eindeutiges, ordinal betrachtbares, und im mathem. Sinne geordnetes Suchkriterium hat, wie z.B. einen eindeutigen Index den du jedem Objekt verpasst. Dann ginge es aber wiederum auch gut über ein Array.)

Eine Hashtable ist auch immer wieder eine feine Sache :).

Nur um mal ein paar suchbare Begriffe in den Raum zu werfen, die sich mit der organisation von Daten befassen ;).

dizzy 29. Nov 2004 15:50

Re: Erzeugen einer unbestimmten Anzahl von Objekten
 
Zitat:

Zitat von maddddi
Erstmal danke für die schnelle Antwort. :)

Wenn ich einen statischen Array nehme, also:

Testarray: Array[1..20000]of TEinwohner;

Belegt der Array dann auch für die Indexe, die noch nicht Created wurden Speicherplatz, oder nur für die Createten?

Es belegt 20000*4 Bytes, da dort nur Referenzen auf TEinwohner hinterlegt sind (und eine Referenz unter Win32 4 Byte groß ist).

Muetze1 29. Nov 2004 16:05

Re: Erzeugen einer unbestimmten Anzahl von Objekten
 
Moin!

Anstatt TList empfehle ich die Benutzung von TObjectList.

MfG
Muetze1

maddddi 29. Nov 2004 16:10

Re: Erzeugen einer unbestimmten Anzahl von Objekten
 
@Muetze1: Was ist an TObjektList besser als an TList?


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