AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Erzeugen einer unbestimmten Anzahl von Objekten
Thema durchsuchen
Ansicht
Themen-Optionen

Erzeugen einer unbestimmten Anzahl von Objekten

Ein Thema von maddddi · begonnen am 29. Nov 2004 · letzter Beitrag vom 29. Nov 2004
Antwort Antwort
maddddi

Registriert seit: 31. Okt 2004
18 Beiträge
 
Delphi 7 Personal
 
#1

Erzeugen einer unbestimmten Anzahl von Objekten

  Alt 29. Nov 2004, 16:33
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.
Derzeitiges Projekt: Simtower
http://www.pro3d.de/forum/index.php?c=19
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Erzeugen einer unbestimmten Anzahl von Objekten

  Alt 29. Nov 2004, 16:39
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
_Sebastian_

Registriert seit: 22. Jul 2004
Ort: Lübeck
72 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Erzeugen einer unbestimmten Anzahl von Objekten

  Alt 29. Nov 2004, 16:41
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.
  Mit Zitat antworten Zitat
maddddi

Registriert seit: 31. Okt 2004
18 Beiträge
 
Delphi 7 Personal
 
#4

Re: Erzeugen einer unbestimmten Anzahl von Objekten

  Alt 29. Nov 2004, 16:47
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?
Derzeitiges Projekt: Simtower
http://www.pro3d.de/forum/index.php?c=19
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Erzeugen einer unbestimmten Anzahl von Objekten

  Alt 29. Nov 2004, 16:48
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 .
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Erzeugen einer unbestimmten Anzahl von Objekten

  Alt 29. Nov 2004, 16:50
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).
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Erzeugen einer unbestimmten Anzahl von Objekten

  Alt 29. Nov 2004, 17:05
Moin!

Anstatt TList empfehle ich die Benutzung von TObjectList.

MfG
Muetze1
  Mit Zitat antworten Zitat
maddddi

Registriert seit: 31. Okt 2004
18 Beiträge
 
Delphi 7 Personal
 
#8

Re: Erzeugen einer unbestimmten Anzahl von Objekten

  Alt 29. Nov 2004, 17:10
@Muetze1: Was ist an TObjektList besser als an TList?
Derzeitiges Projekt: Simtower
http://www.pro3d.de/forum/index.php?c=19
  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 09:48 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