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
Das kannst du ja trotzdem machen. Die Assoziation mit dem Namen ist schon in std::map eingebaut, zudem kannst du die Funktionalität mit freien Funktionen oder Wrapper-Klassen sehr gut erweitern. Halte ich für die bessere Vorgehensweise als selbst was zu basteln, das einen Grossteil der Funktionalität nur nachbaut – wahrscheinlich sogar schlechter.Zitat von »"Laguna"«
Jedoch möchte/kann ich für die organisation nicht die std-Container benutzen, da ich mir einige zusätzliche Funktionen wünsche. So z.B. dass jedes Spielobjekt über seinen Bezeichner identifizierbar ist oder dass Objekte serialisiert werden können, für Speichern/Laden (und einige andere Sachen)
Ich habe ehrlich gesagt zu wenig Informationen. Du sagst, du willst ein paar Objekte machen, die du serialisieren und über den Namen ansprechen willst. Aufgrund dessen kann ich noch nicht sagen, was nun geeigneter wäre.Zitat von »"Laguna"«
Mir erscheinen gerade zwei Wege sinnvoll: Entweder ich baue mir einer Vererbungshierarchie auf: "GameObject" und dies als Interface für eine Speicherung.
Alternativ eine Templateklasse, die diese Objekte verwaltet.
Die Performance von virtuellen Funktionen sollte kein ausschlaggebendes Kriterium sein. Die ist in den allermeisten Fällen um Dimensionen weniger kritisch als z.B. Rendering- oder komplexe Rechenvorgänge.Zitat von »"Laguna"«
Allerdings kann man sich damit auch recht schnell in Sackgassen manövrieren. Zusätzlich kommt einiges an Tipparbeit auf einen zu, sowie die Performanceeinbußen durch VTables.
Zitat von »"Nexus"«
Die Performance von virtuellen Funktionen sollte kein ausschlaggebendes Kriterium sein. Die ist in den allermeisten Fällen um Dimensionen weniger kritisch als z.B. Rendering- oder komplexe Rechenvorgänge.Zitat von »"Laguna"«
Allerdings kann man sich damit auch recht schnell in Sackgassen manövrieren. Zusätzlich kommt einiges an Tipparbeit auf einen zu, sowie die Performanceeinbußen durch VTables.
Dann müssten in Java alle Spiele von Vornherein zum Scheitern verdammt sein.Zitat von »"CBenni::O"«
Wenn man ein komplettes Spiel darauf aufbaut, kann das imo nur schiefgehen.
Mit Bezeichner meine ich eher die Identifizierung ala "suche mir einen NPC mit Namen 'NPC_Klaus'" Eine Map lohnt da nicht, weil die NPC-Klasse eh schon ein Namens-Attribut hat.Zitat von »"Nexus"«
Das kannst du ja trotzdem machen. Die Assoziation mit dem Namen ist schon in std::map eingebaut, zudem kannst du die Funktionalität mit freien Funktionen oder Wrapper-Klassen sehr gut erweitern.Zitat von »"Laguna"«
Jedoch möchte/kann ich für die organisation nicht die std-Container benutzen, ...
Hm... Das ist dann der Punkt, bei dem ich mir nicht sicher bin. Ich denke, die grundlegenden Programmierstrukturen kenne ich einigermassen, jedoch schrecke ich vor der Kombination noch ein wenig zurück. Dann müsste ich als Programmierer ja quasi 2 Interfaces darstellen, eines als richtiges Interface und eines als Template klasse...Zitat von »"Nexus"«
Zudem solltest du nicht denken, dass Polymorphie und Templates sich ausschliessen. Oft kommen die vollen Abstraktionsmöglichkeiten erst zum Zug, wenn man mehrere Konzepte kombiniert.
Zitat von »"Nexus"«
Kannst du mir vielleicht zitieren, was Heiko Kalista in seinem Buch genau sagt?
Kombination bedeutet eben nicht zwei sich ausschliessende Alternativen. Setze die Konzepte da ein, wo sie sinnvoll sind. Du wirst mit der Zeit merken, dass jedes seinen eigenen Anwendungsbereich hat und beide zusammen sich gut ergänzen und eine ziemliche Abstraktion ermöglichen. Natürlich ist das nicht ganz einfach, wenn man nicht schon eine gewisse Erfahrung hat. Ich würde dir auch gerne spezifische Ratschläge geben, aber da du bezüglich deiner Programmstruktur nicht wirklich konkreter geworden bist, wird das schwierig für mich.Zitat von »"Laguna"«
Dann müsste ich als Programmierer ja quasi 2 Interfaces darstellen, eines als richtiges Interface und eines als Template klasse...
Danke, aber ich fragte eigentlich nach einem Zitat, da ich das Buch nicht besitze.Zitat von »"CBenni::O"«
Ööm...
2. Erweiterte Auflage, Seite 226,
Kapitel 9.9.3 "Vererbung und Performance"
Was kann nicht gut sein? Überall virtual hinschreiben wo es hinpasst? Ja, da hast du Recht. Aber ansonsten würde ich nicht zu schnelle Schlüsse ziehen, auch wenn sich Sätze wie "virtuelle Funktionen sind langsam" besonders gut einprägen...Zitat von »"CBenni::O"«
EDIT: Ja, war eine bisschen unglückliche Formulierung, es kam mir nur so vor, dass so etwas nicht gut sein kann...
Zitat
Vererbung ist eine tolle Sache [...] aber gerade wenn virtuelle Memberfunktionen zum Einsatz kommen, kann das Auswirkungen auf die Performance haben.
Oft wird das unterschätzt [...] Virtuelle Funktionen schleppen verhältnismäßig viel Ballast mit sich herum, was an den internen Abläufen liegt, [...]
Man sieht immer wieder Engines und Sourcecodes, wo es mit der Ableitung und den virtuellen Funktionen einfach übertrieben wurde.
Werbeanzeige