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
Ich kenne mich mit SFML nicht so aus, aber es erscheint mir als Verschwendung, ein Sprite-Objekt für jede einzelne Grafik zu erstellen, die ich irgendwo auf dem Bildschirm zeichnen will. Gibt es nicht auch eine direktere Zeichenmethode? So nach dem Motto "Zeichne mir DIESE Grafik an DIESE Stelle".
Design-Vorschlag: Lass die Karte sich nicht selbst zeichnen, sondern beschränke ihre Funktion auf das Laden, evtl. Speichern und die Bereitstellung der Kartendaten. Erfinde stattdessen eine zusätzliche Klasse MapRenderer mit einer Funktion DrawMap( const cMap& map, const cCamera& camera), die das Zeichnen übernimmt.
Stil-Vorschlag: lass das "c" vor Klassennamen weg. Klassennamen und Typen schreibt man groß, Instanzen klein, fertig.
Performance-Vorschlag: speichere alle Tiles nicht in einer verketteten Liste, sondern in einem Array - std::vector ist Dein Freund. Der Vector bietet schenllen Zugriff auf beliebige Elemente im Container (zum Googlen: konstante Komplexität), während man bei einer Liste immer von vorn loszählen müsste, wenn man ein Element aus der Mitte haben will (Lineare Komplexität). Da eine TileMap nunmal auf Platte aus Indizes von Tiles besteht, kannst Du dann mit den Indizes direkt in das Tile-Array greifen.
Ohne die genauen Implementationsdetails zu kennen, ist es ein wenig schwer zu sagen, ob die Klassenaufteilung Sinn macht. Ansich sieht es aber ok aus.
Sich um einen guten Stil zu bemühen ist immer gut, allerdings braucht man da letztendlich sehr viel Erfahrung. Wenn du nach 10 Jahren programmieren feststellst, dass der Entwurf den du vor 2 Jahren gemacht hast Müll ist, ist das normal. Man lernt eben immer dazu.
Wegen verketteter Listen: Es ist halt immer die Frage, wie du es genau benutzen möchtest. Wenn du Beispielsweise eine bestimmte Datei öffnen willst, könnte auch eine std::map sinnvoll sein, da du dort schnell sehen kannst, ob du sie schon geladen hast. Mach dich am besten ein wenig vertraut damit, was es so für Container gibt und welche Vor- und Nachteile diese haben.
Werbeanzeige