Dienstag, 14. Februar 2012

GameStateManager, Content Unload und Frustration

Durch Zufall habe ich ein ziemlich großes Problem in meinem aktuellen GamestateManager gefunden.

Vereinfacht gesagt ist ein GamestateManager ein Code der die verschiedenen Screens verwaltet. Wenn ich das Spiel starte, soll zuerst ein Screen kommen mit dem Titel des Spiels, dann einer für das Hauptmenu, im anschluß daran der für das Spiel, Laden, Speicher etc.

Jeder dieser Screens hat seinen eigenen Inahlt. Im Titelscreen ist das nur ein Hintergrund und ein kleiner Text für die Versionsummer.
Im Hauptmenu wird das dann schon komplexer, Bilder für Buttons und Rectangels um diese zu bedienen, dazu noch funktionen für das einfärben bzw. austauschen von Buttons. Nicht zu vergessen das daß anklicken eines Buttons wiederum einen neuen Screen auslöst.

All diese Bilder, Funktionen etc. benötigen Speicher. Nachdem man das Spiel gestartet hat, braucht man aber weder den Titelscreen, noch den Hauptmenuscreen. Diese sollten aus dem speicher entfernt werden. Dafür ist dann wieder der sogenannte Garbage Collector in C# zuständig.

Mein Problem ist jetzt allerdings: Klicke ich im GameScreen auf eine bestimmte freie Stelle, löse ich eine aktion aus die im HauptmenuScreen verbaut ist. Da GameScreen und HauptmenuScreen von ein andere getrennt sind, sollte eine solche reaktion unmöglich sein.

Die einzige Erklährung die ich dafür habe ist die, das daß Hauptmenu nicht aus dem Speicher entfernt wird.

Mitlweile habe ich mich damit abgefunden das ich wohl meinen gesamten Code zum dritten mal schreiben muss. Diesesmal aber erst, nachdem ich mir ein neues Sample zum GameStateManager angesehen habe.

Keine Kommentare: