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