002
10.09.2008, 21:28 Uhr
0xdeadbeef
Gott (Operator)
|
Du erstellst auf die Art jedes mal ein neues Objekt, das am Ende des Blocks, in dem es instantiiert wird, auch wieder zerstört wird. Wenn du das selbe Objekt in mehreren Funktionen benutzen willst, gibst du der Funktion am besten einen Parameter, in diesem Fall eine Referenz:
C++: |
void MapZeichnen(CMap &Zeile1A){ // ...
|
Richtig schön objektorientiert ist das so auch nicht, aber das ist mit OpenGL auch ein bisschen schwierig; immerhin ist das Konzept, auf dem OpenGL (und auch andere DM-Bibliotheken) basiert, entwickelt worden, bevor OOP populär wurde, und war im Grunde damals schon ein dreckiger Geschwindigkeitshack. Heute ist das Arbeiten mit einer state machine eigentlich unnötig - die Rechner sind inzwischen schnell genug - aber so etwas wird man später nur sehr schwer wieder los; tausende Spieleentwickler müssten neu ausgebildet werden und richtige Programmierung lernen. In einer saubereren Umgebung würde ich hier mit Visitor-Methoden für Gerätekontexte arbeiten, aber mit OpenGL ist das ein bisschen Perlen vor die virtuellen Säue.
Sonstige Anmerkungen - es wäre wahrscheinlich sinnvoll, die Datenmember hier noch etwas weiter zu abstrahieren. Ich kann mir deinen use case hier nur zusammenfantasieren, aber zumindest eine Abstraktion a la
C++: |
struct punkt_2d { float x, y; };
class map { public: // ...
private: punkt_2d a, b, c, d; };
|
scheint sinnvoll. Je nachdem, was das Ding nachher können soll, wäre evtl. auch
C++: |
class map { public: // ...
private: std::vector<punkt_2d> punkte_; };
|
denkbar, aber das kann ich nicht sagen, wenn ich nicht weiß, was du eigentlich machen willst. In ähnlicher Weise ließen sich die Farbwerte in
C++: |
struct color { float r, g, b; };
|
zusammenfassen.
Oh, und bitte, lass die ungarische Notation sein. Wenig macht Code unlesbarer und schwerer zu warten. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |