Entwickeln ein Spiel von Teris Ich kam zu der Schlussfolgerung, dass die Verwendung der üblichen MVC-Muster würde möglicherweise meinen Code überfluten, sowie, weil OpenGL unter GLEW arbeitet, machen es wesentlich schwieriger, darauf aufzubauen. Stattdessen kam ich mit dieser ordentlichen Änderung, auch abhängig von Beobachter-Muster auf, das wäre etwas mehr Sinn machen, zumindest kurzfristig (Bild nicht vollständig Klassenbaum reflektiert):
Wie löst man diesen Designfehler?
zu erklären:
-Jeder Box ist eine Klasse, Engine
enthält Instanz von Entities
, Game
enthält Instanzen von Figure
.
- Figure
erbt Entity
.
- Engine
beobachtet Game
und Game
gekoppelt ist, die von Beobachtern mit Figures
.
Wie sollte es funktionieren:
Im Idealfall sollte ich Engine
instanziiert die GLEW und GLFW zusammen mit allen anderen, die das Fenster bilden, dann erstellen Sie ein Game
Objekt, das im neuen Thread gesetzt wird, eine Figur schaffen, und benachrichtigen Sie die Engine, um die Zeichnungsschleife zu starten, und wenn diese Zahl festgelegt ist, übergeben Sie sie mit einem Objektzeiger an Engine
über Observer.
Dies würde wunderbar funktionieren, ich wäre in der Lage, alle Arten von Zahlen durch Erben Entity
, Zahlen würden nicht vom Bildschirm fallen, wie jedes Koordinatenupdate würde gehen durch Game
, und ich könnte wahrscheinlich geben jede Figur ein einzigartiges Shader, wenn das nötig wäre.
Wie es funktioniert tatsächlich:
Motor initialisiert wird, Spiel initialisiert, Abbildung für in einem anderen Thread aufgerufen wird, und
atioglxx.dll: 0xC0000005: Access violation reading location 0x00000728.
wirft, wenn jede OpenGL-Funktion für den Zugriff gefragt.
Ich vermute, dies passiert, weil die Figure
nicht weiß, dass alle unterstützende Funktionalität in Engine
gestartet ist. Und ich kann es nicht noch einmal in Figure
tun. Ich könnte alles, was mit View zu tun hat, auf die Engine
verschieben, aber dann wäre ich nicht in der Lage, separate Shader zu setzen, und ich müsste VAOs (Vertex Array Objects) für jede Figur innerhalb von Engine
erstellen.
Also, wie mache ich den Fehler weg, während so wenig Änderungen wie möglich einzuführen?
kann dies ein interessantes Problem sein, kann aber auch sein Wegthema . – Walter
@Walter, ich überlegte, es auf gamedev.stack zu platzieren, aber es scheint sich nicht so sehr um architektonische Probleme zu kümmern –