Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

1

09.05.2015, 20:55

[C++] Klasse mit Vectoren als Member in Datei speichern

Hallo liebe Community !

Nun zu einen neuen Problem von mir :

Ich möchte für mein Spiel eine TileMap abspeichern, was inzwischen für statische Größen funktioniert (mit Arrays also).
Da ich aber später mal die Levelgröße anpassen möchte oder auch kleinere Levels gestalten möchte, möchte ich nun
die Map(die normalerweise bis jetzt)ein 1-dimensionales Array ist.(Klappt sogar super :) )

Ich speichere dabei gerade nur einen gewissen Teil, nur das Array aus IDs und n bool-Array für Kollision.
Das hätte ich dann gerne als Vektoren.
Hier mein Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class TMD
{
public:
    // Neuer Teil für vektoren
    unsigned short MapSizeX;
    unsigned short MapSizeY;

    std::vector<unsigned short> ForeGroundv;
    std::vector<unsigned short> BackGroundv;
              std::vector<bool> CollisionMapv;

    // Alter Teil mit Arrays
    unsigned short ForeGround[MapSizX*MapSizY];
    unsigned short BackGround[MapSizX*MapSizY];
          bool CollissionMap[MapSizX][MapSizY];
};


Wie sollte ich am besten dieses Paket abspeichern ?
Danke für Vorschläge !
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

Julién

Alter Hase

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

2

09.05.2015, 21:45

Hi,
ich verstehe deine Frage nicht, bzw. dein Deutsch nicht. (Oh shit, jetzt weis ich wie mein Deutschlehrer sich übermorgen fühlen wird haha)

Was deine andere Frage betrifft, "Wie sollte ich am besten dieses Paket abspeichern":
So wie es gerade aussieht, mit den Vectoren, passt es eigentlich.
Ich würde aber dennoch die Datenkapselung nutzen, sprich:
Kein public-Felder, sondern Setter und Getter Methoden und die Felder (oder Attribute, je nachdem von welcher Schule du kommst) würde ich auf "private" oder "protected" setzen.

Falls du mit deiner Lösung nicht zufrieden bist, dann schau dir doch die Lösungen von Open Source Projekten an.


MfG Julien
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

3

09.05.2015, 21:48

Sorry für mein Deutsch, wenn es etwas später ist und ich dann versuche sinnvolle Sätze zu bilden,
fühle ich mich etwas überfordert ^^ Sorry deswegen !

Ich will dieses Paket in eine Datei schreiben, sonst eigentlich nichts.
Nur weiß ich nicht, die ich die Vektoren abspeichern soll, da sie ja immer verschieden groß sind.

Danke !
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

4

09.05.2015, 21:59

Du speicherst vor dem Dateninhalt des Vectors einfach, wieviele Elemente im Vector drin sind.

Übrigens würde ich mit so Typen wie "short" gar nicht erst anfangen, dass macht nur Probleme.
Nimm lieber size_t für Datengrößenangaben/Datenindices und sonst Typen fester Größe wie uint32_t. Das spart viel Ärger.
In Dateien solltest du sowieso nur Datentypen fester Größe schreiben(ggf. vorher konvertieren). Also zum Beispiel uint32_t. Außerdem solltest du Endianness beachten, besonders wenn du andere Platformen erreichen willst. Eigentlich ist es nicht außergewöhnlich schwer, aber die STL von C++ bietet dafür leider sehr wenig Hilfsmittel.

Werbeanzeige