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

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

1

28.02.2008, 14:13

Datenspeicherung

Hi,

da ich mich bei meinem letzten Projekt wohl etwas übernommen habe und immernoch keine ahnung habe, wie ich das Problem(welches nur in der Theorie existiert) zu lösen weis, dachte ich, ich fange mit etwas einfacherem an. Ein kleiner Ego-Shooter. Die Planung ist soweit fertig. Es gibt nun 3 Klassen, die für diesen Beitrag Relevant sind.

C-/C++-Quelltext

1
2
3
CWeaponType
CWeapon
IWeaponManager

CWeaponType
Diese Klasse enthält informationen die für alle Waffen gleich sind, also z.b. der Name der Waffe oder ein Zeiger auf das Irrlicht mesh.

CWeapon
Für jede Waffe im Spiel wird hiervon eine neue Instanz erzeugt. Die Klasse enthält daten, wie z.b. den Grad der Abnutzung oder die Aktuelle Position im Spiel. Ausserdem gibt es einen Zeiger vom Typ CWeaponType*. Dieser Zeiger zeigt auf den Waffentyp. Das Konzept wird auch in Davids Buch(2. Auflage beim Spiel galactica) verwendet.

IWeaponManager
Der Manager für die Waffen und die Waffentypen. Die Waffen sind alle auf dem Heap, intern gibt es zwei listen aus Zeigern(CWeaponType* und CWeapon*).

Nun zum eigentlichen Problem.
Um die Waffentypen zu speichern benutze ich ein xml format. Aber wie spiechere ich die Waffen? Die Zuordnung von Typ und Waffe darf ja nicht verloren gehen! Wie kann ich das anstellen?

Ich habe mir also etwas gedanken gemacht, was man da tun kann. Ich bin zu dem Schluss gekommen, das das Benutzte Konzept erstens das einzige ist, das mir bekannt ist und zweitens nicht für die Speicherung eines Spielstandes geeignet ist. Das heisst nicht, dass es nicht geht, aber ich denke es ist nicht optimal. Wie macht man sowas? es gibt mit sicherheit andere Ansätze oder? Komplizierte erklärungen könnt ihr euch sparen, wenn ihr nen Link habt, reicht das schon völlig. Aber bitte postet mich nicht mit sachen zu, von denen ihr schonmal gehört habt, und die mir eventuell etwas bringen könnten. Es wäre gut, wenn ihr schon selber etwas erfahrung hättet.

Eine Weitere Methode ist mir noch eingefallen, die allerdings nicht zufriedenstellend ist. Ich könnte einfach nur eine Klasse benutzen. Das würde aber bedeuten, dass ich sozusagen Dummy-Waffen habe und von diesen Kopien erzeugen müsste. Keine besonders schöne lösung. Ausserdem steigert es den Speicherverbrauch nur unnötig.(Man kann ja davon ausgehen, dass es später mal locker 20 gegner gibt und diese haben dann auch noch 2-3 Waffen dabei).

Ich hoffe doch sehr ihr könnt mir helfen,

Socke

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

28.02.2008, 14:25

Standardsherangehenweise:
1. Man verpasst jedem Waffentyp eine eindeutige Identifikation (z.B. String mit eindeutigen Namen oder eindeutige ID).
2. Beim Speichern der Waffe wird die Identifikation des Waffentyps abgespeichert.
3. Beim Laden werden erst die Waffentypen geladen und dann über die gespeicherte Identifikation der passende Waffentyp rausgesucht.

http://de.wikipedia.org/wiki/KISS-Prinzip ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

3

28.02.2008, 14:56

Naja IDs(oder namen eben) wären eine möglichkeit aber ich weiss ja net so recht. Aber ich glaub so werd ichs erstmal machen, den link les ich mir jetzt durch.

Socke

Werbeanzeige