Engine-Design
-
Hallo!
Ich komme durcheinander. Meine Direct3D-Klasse (Init, renderer, ...) muss Zugriff auf die Cam-Klasse haben, und diese wiederum auf die DirectInput Klasse, und die wiederum auf die Gamestats-Klasse.
Wenn jetzt die Direct3D Klasse auf die settings zugreifen will, muss sie das über 2 Klassen tun, denn die Direct3D Klasse hat eine Instanz der Cam-Klasse, diese wiederum eine von der DirectInput-Klasse und diese von der Gamestats-Klasse.
Wie macht man sowas ohne Globale?
Die Klassen DirectInput, Cam und Direct3D müssen Zugriff auf Gamestats haben, Direct3D auf Cam, Cam auf DirectInput.
Wo finde ich gute Engine-Designs? Ich komme mit includes, forward-Deklaration usw. immer durcheinander

-
es gibt natuerlich beliebig viele moeglichkeiten der realisierung.
fuer gewoehnlich sind alle "objekte" in einer hierarchischen struktur verstaut - dem scenegraph.
daraus holt man das gerade relevante camera-objekt, das directinput-interface modifiziert dessen transformation entsprechend und der renderer arbeitet den scenegraph einfach ab:sceneGraph->setActiveCamera("Camera01"); Camera *cam= sceneGraph->getActiveCamera(); controllInterface->createCameraSettings(cam); renderer->renderScene(sceneGraph);
-
ceplusplus schrieb:
Wenn jetzt die Direct3D Klasse auf die settings zugreifen will, muss sie das über 2 Klassen tun, denn die Direct3D Klasse hat eine Instanz der Cam-Klasse, diese wiederum eine von der DirectInput-Klasse und diese von der Gamestats-Klasse.
Wie macht man sowas ohne Globale?
Durch Indirektion.
-
Wenn du das mal näher erkäutern könntest, TGGC.
-
-
Was ist Indirektion in dieser Weise?
-
Statt direkt auf die Cam Klasse zuzugreifen, greifst du nur indirekt zu, z.b. über die Speicheradresse. f'`8k
AutocogitoGruß, TGGC (\-/ returns)
-
Beispiele? Sorry bin Anfänger.
Ich möchte von einer Klasse nur ein Objekt anlegen, es aber in mehreren Klassen verwenden.
Geht es auch so, und wäre es gut:
[b]Core[/b] -> [b]DICore[/b] -> [b]Cam[/b] -> [b]DGCore[/b] Core core; Cam cam; Core& getRefCore(); DICore dicore; Core& core = dicore.getRefCore();
-
Keine Ahnung, was die "Zeichnung" uns sagen soll. f'`8k
Gruß, TGGC (\-/ returns)
-
Dick geschrieben sind die Klassen. DGCore included Cam, diese DICore und diese Core. Darunter stehen (jaja verstreut) die Elemente und Methoden.
Dann hätte DGCore Zugriff auf das Core-Objekt und DICore auch.
-
wie hast dus geschafft ne kamera zu proggen, wenn du noch anfänger bist?
-
Teilweise zusammenklicken, so lerne ich schnell.

-
Aber auch nur wenn du versuchst das "zusammengeklickte" zu verstehen...
-
Ich möchte von einer Klasse nur ein Objekt anlegen, es aber in mehreren Klassen verwenden.
Singleton Pattern!
-
Also mit einem Singleton geht das?
Ich erstelle z.B. 10 Objekte der Klasse, aber es wird sowieso nur eines erstellt, jedoch habe ich dann von überall Zugriff?
-
ceplusplus schrieb:
Also mit einem Singleton geht das?
Ich erstelle z.B. 10 Objekte der Klasse, aber es wird sowieso nur eines erstellt, jedoch habe ich dann von überall Zugriff?
-
ceplusplus schrieb:
Also mit einem Singleton geht das?
Ich erstelle z.B. 10 Objekte der KlasseNein, aber das kannst du ja nachlesen. f'`8k
AutocogitoGruß, TGGC (\-/ returns)
-
Thx, singletons sind die Lösung.
-
Nein, nicht unbedingt. Singletons wären z.B. für eine Kameraklasse völlig fehl am Platz!
grüße
-
Stimmt, aus der mache ich auch keinen
