AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Speichern verschiedener Objekte in einer Datei
Thema durchsuchen
Ansicht
Themen-Optionen

Speichern verschiedener Objekte in einer Datei

Ein Thema von TheAn00bis · begonnen am 9. Apr 2006 · letzter Beitrag vom 17. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#1

Speichern verschiedener Objekte in einer Datei

  Alt 9. Apr 2006, 11:25
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Speichern verschiedener Objekte in einer Datei

  Alt 9. Apr 2006, 11:27
Wie wäre es mit einer XML-Datei. Dann hast Du auch keine Probleme falls später mal weitere zu speichernde Infos dazu kommen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: Speichern verschiedener Objekte in einer Datei

  Alt 9. Apr 2006, 11:36
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
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#4

Re: Speichern verschiedener Objekte in einer Datei

  Alt 11. Apr 2006, 10:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

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

Re: Speichern verschiedener Objekte in einer Datei

  Alt 11. Apr 2006, 13:51
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Speichern verschiedener Objekte in einer Datei

  Alt 11. Apr 2006, 13:55
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 )
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#7

Re: Speichern verschiedener Objekte in einer Datei

  Alt 11. Apr 2006, 19:24
Zitat von jim_raynor:
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.
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#8

Re: Speichern verschiedener Objekte in einer Datei

  Alt 13. Apr 2006, 10:17
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!
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#9

Re: Speichern verschiedener Objekte in einer Datei

  Alt 14. Apr 2006, 12:55
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?
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#10

Re: Speichern verschiedener Objekte in einer Datei

  Alt 15. Apr 2006, 13:10
*push*
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:56 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