[2D Rollenspiel] Daten effizient speichern.
-
Hi Leute,
ich hab mal wieder ein Problem
Es geht darum, dass ich eine Klasse <Welt> habe die sechs Instanzen der Klasse
<Ebene> (Keller2, Keller1, Erdgeschoss, Stockwerk1, ..., Stockwerk3) enthält.
Die Ebenen selbst enthalten eigentlich nur 4 Int-Arrays[100][100], die
Operatoren "=" und "==" sowie die Methode "Serialize".Ich würde das ganze Werk nun gerne serialiseren.
Habe ich auch gemacht... Fazit: Datei > 280MBEigentlich sollten es doch ca. 10000 * 4 * 6 = 240000 Byte ~ 0,25MB sein, oder
nicht???Kann mir wer sagen wie diese Differenz zu Stande kommt?
Danke im Vorraus,
Khadgar
-
Ein int ist in der Regel 4 Byte groß..
Kommt aber noch nicht an deine 280 MB ran
-
Hi!
Schreib mal wie die Daten gespeichert werden! (also die funktion)
-
Wollen wir das mal aufbröseln
Die Klasse DWelt:
#include "DAbstraktum.h" #include "DEbene.h" class DWelt : public DAbstraktum { public: DWelt(); virtual ~DWelt(); DEbene Keller2; DEbene Keller1; DEbene Erdgeschoss; DEbene Stockwerk1; DEbene Stockwerk2; DEbene Stockwerk3; };
Die Klasse DEbene:
#include "DAbstraktum.h" #include "DPhysikum.h" #include "DLebewesen.h" class DEbene : public DAbstraktum { public: DEbene(); virtual ~DEbene(); void Serialize(CArchive & ar); DEbene & operator= (const DEbene & rhs); bool operator== (const DEbene & rhs); int passierbarkeitsLayer[100][100]; int bodenLayer[100][100]; int objektLayer[100][100]; int kreaturenLayer[100][100]; };
Und die zugehörige Funktion:
SetzePassierbarkeitsLayer(); CFile e(m_sDateiname, CFile::modeCreate); e.Close(); CStdioFile f(m_sDateiname, CFile::modeWrite); CArchive ar(&f, CArchive::store); welt.Keller2.Serialize(ar); welt.Keller1.Serialize(ar); welt.Erdgeschoss.Serialize(ar); welt.Stockwerk1.Serialize(ar); welt.Stockwerk2.Serialize(ar); welt.Stockwerk3.Serialize(ar); ar.Close(); f.Close();
@DrGreenthumb:
Stimmt, das hatte ich nicht bedacht.@DasPinsch:
Dank deiner Nachfrage musste ich die "DateiSpeichern"-Funktion wieder
serialiseren lassen (hatte das inzwischen über Binärdaten probiert) und jetzt
wo ich die serialisierung erneut implementiert hatte, geht es
Also dank dir vielmals für die Nachfrage denn ohne diese hätte ich die
Serialiserung dieser Daten vermutlich ganz aufgegeben :)))))Vielen Dank Euch Beiden,
Khadgar