Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speichern verschiedener Objekte in einer Datei (https://www.delphipraxis.net/67077-speichern-verschiedener-objekte-einer-datei.html)

TheAn00bis 9. Apr 2006 11:25


Speichern verschiedener Objekte in einer Datei
 
Hey,

Ich programmiere gerade ein Spiel, dass Karten benötigt. Auf den Karten gibt es Objekte verschiedener Typen und zusätzlich hat die Karte noch weitere Eigenschaften, wie Hintergrundanimationen etc..

Ich würde gerne all diese Daten in einer Datei speichern, da es viele verschiede Objekte gibt und es sehr unschön wäre, für jeden Objekttypen eine eigene Datei anzulegen.

Wie gehe ich vor?

Ich könnte für die verschiedenen Objekte ein Record verwenden; der Record-Typ hätte dann ein Attribut, das besagt, um welchen Objekttypen es sich handelt. Allerdings hängen alle weiteren Attribute vom Objekttypen ab, was bedeutet, dass je nach Objekttyp alle nicht benötigten Attribute leer blieben.
Eine weitere Möglichkeit wäre die Verwendung einer IniDatei, was ich allerdings für genauso unschön halte. Hier würde der Name der Sektion dann vermutlich als Präfix den Objekttypen deklarieren, was auf unschöne Stringoperationen hinausliefe.
Es wäre auch möglich verschiedene Dateien zu benutzen, diese aber in ein Archiv zu packen, aber auch dies wäre ziemlich aufwändig in Bezug auf das Speichern und Laden der Daten.

Was empfehlt ihr mir? Bietet sich die Verwendung einer Datenbank an?

Die Eigenschaften der Karte könnte ich - sofern nicht anders möglich - auch in einer zusätzlichen Ini-Datei speichern, aber die Objekte hätte ich schon lieber in einer Datei.

Bernhard Geyer 9. Apr 2006 11:27

Re: Speichern verschiedener Objekte in einer Datei
 
Wie wäre es mit einer XML-Datei. Dann hast Du auch keine Probleme falls später mal weitere zu speichernde Infos dazu kommen.

jfheins 9. Apr 2006 11:36

Re: Speichern verschiedener Objekte in einer Datei
 
Eine Möglichkeit wäre eine Hier im Forum suchendpCollection - dann müsstest du deine Karten-Objekte von TCollectionItem ableiten, und schon könntest du einfach ein MapObject.SaveToFile machen und fertig ;)

TheAn00bis 11. Apr 2006 10:47

Re: Speichern verschiedener Objekte in einer Datei
 
Ist es auch möglich, ein Record zu nehmen, in welchem Arrays vom Typen der verschiedenen Objekte sind?
Beispiel:

Delphi-Quellcode:
GameObject = record
    objects1 = array of TObject1;
    objects2 = array of TObject2;
    {...}
    property1: Boolean;
    {...}
end;
Dann würde die "file of GameObject" nur ein "GameObject" besitzen, in dem alle restlichen Objekte stünden;
zusätzlich enthielte es auch die weiteren Eigenschaften der Karte.

Ich finde diese Variante unkomplizierter, was möglicherweise auch daran liegt, dass ich mich schon ziemlich an Records gewohnt habe. Dagegen spricht nichts, oder? Würde man das als "unschönen Programmierstil bezeichnen"?

//Edit: Statt der Arrays kann ich sogar TObjectListen verwenden, was das ganze noch komfortabler macht.

jim_raynor 11. Apr 2006 13:51

Re: Speichern verschiedener Objekte in einer Datei
 
Zitat:

Zitat von TheAn00bis
Ist es auch möglich, ein Record zu nehmen, in welchem Arrays vom Typen der verschiedenen Objekte sind?

Nein, da der Record in einem file of keine Strings und dynamische Arrays enthalten darf. Mach ne XML-Datei oder dpCollections. Klingt für den Anfang kompliziert ist aber wesentlich flexibler.

jfheins 11. Apr 2006 13:55

Re: Speichern verschiedener Objekte in einer Datei
 
Delphi-Quellcode:
GameObject = record
    objects1 = array of TObject1;
    objects2 = array of TObject2;
    {...} 
    property1: Boolean;
    {...} 
end;
Das sollte

1. Kein record sein sondern eine Klasse und
2. Das Array sollte dann eine SubCollection sein
und dann sollte das gehen ;)

(TCollection ist Quasi ein Array of TCollectionItem - da muss man dann aber auch mit Klassen arbeiten ;))

TheAn00bis 11. Apr 2006 19:24

Re: Speichern verschiedener Objekte in einer Datei
 
Zitat:

Zitat von jim_raynor
Zitat:

Zitat von TheAn00bis
Ist es auch möglich, ein Record zu nehmen, in welchem Arrays vom Typen der verschiedenen Objekte sind?

Nein, da der Record in einem file of keine Strings und dynamische Arrays enthalten darf. Mach ne XML-Datei oder dpCollections. Klingt für den Anfang kompliziert ist aber wesentlich flexibler.


Dann mach ich ein Array mit einer Länge von 500 und arbeite das soweit ab, bis der Inhalt leer ist! =P
Das gleiche mit den Strings. ;)

Spaß beiseite, ich versuch mal mit den Collections zurecht zu kommen.

TheAn00bis 13. Apr 2006 10:17

Re: Speichern verschiedener Objekte in einer Datei
 
Hey, die Verwendung der Collections ist weit aus unkomplizierter, als ich erwartet habe!
Vielen Dank für die Antworten und vor allem Danke an Alcaeus für das Tutorial! :)

TheAn00bis 14. Apr 2006 12:55

Re: Speichern verschiedener Objekte in einer Datei
 
Müssen alle Objekte, die in einer Collection abgespeichert werden von TPersistent abgeleitet sein?

Ich hab jetzt eine Collection mit Namen "Coll", diese enthält wiederum die Subcollection TBrickCollItem, welche die beiden SubSubcollections "TRealCollItem" und "TTargaCollItem" enthält, diese verwende ich anstelle eines "Array of Real" und anstelle eines "Array of TTargaGraphic".
Die Subcollection "TRealCollItem" hat das Attribut "RealValue: Real" und "TTargaCollItem" hat "Targa: TTargaGraphic" als Attribut.
Beim Speichern der Collection gibt es keinerlei Probleme, aber beim Laden macht die "TTargaCollItem" Probleme.
Es treten eine Reihe von Exceptions auf (beim Aufruf von Coll.LoadFromFile(filename)): 1. "Ungültiger Pfad für Eigenschaft", 2. "Fehler beim Lesen von TTargaCollItem.Targa.Data: Ungültiger Pfad für Eigenschaft" 3. "Fehler beim Lesen von TBrickCollItem.TargaCollItems: Fehler beim Lesen von TTargaCollItem.Targa.Data: Ungültiger Pfad für Eigenschaft".

Mach ich da irgendetwas falsch, beim Speichern oder beim Laden - oder kann man das nicht sagen oder kann ich generell kein TTargaGraphic (was übrigens aus GraphicEx stammt) in einer Collection speichern?

TheAn00bis 15. Apr 2006 13:10

Re: Speichern verschiedener Objekte in einer Datei
 
*push*


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.
Seite 1 von 2  1 2      

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