Je suis en train de créer un RPG 2D en C ++ 11 avec Allegro 5 et boost.
Mon objectif est de mettre à jour mes paramètres de jeu d'une manière ou d'une autre lorsqu'une option est modifiée dans le menu Options. Je ne veux pas forcer l'utilisateur à redémarrer mon jeu. D'autres jeux ne nécessitent pas de redémarrage lors du changement de résolution ou du passage du mode plein écran au mode fenêtré, donc mon jeu ne devrait pas non plus. Veuillez voir une vue simplifiée du système ci-dessous.
Veuillez noter que je ne souhaite pas nécessairement appeler directement mon objet Game depuis l'écran OptionsScreen. La ligne pointillée sert simplement à illustrer l'effet que j'essaie d'obtenir; pour provoquer en quelque sorte une mise à jour du jeu lorsqu'une option est modifiée dans une autre partie du système.
Explication détaillée
Le ScreenManager contient une liste de tous les GameScreen
objets existants. Ce seront différents écrans du jeu, y compris des popups. Cette conception adhère plus ou moins à l' échantillon de gestion du jeu Etat en C # / XNA .
Le ScreenManager
contient une référence à mon Game
objet. L' Game
objet initialise et modifie les paramètres du jeu. Si je veux changer la résolution, passer en plein écran ou couper le volume, je le ferais en Game
classe.
Cependant, OptionsScreen ne peut actuellement pas accéder à la classe Game. Voir le schéma ci-dessous:
Un GameScreen peut signaler trois événements onFinished
, onTransitionStart
et onTransitionEnd
. Il n'y en a pas onOptionsChanged
parce qu'un seul écran fait ça. ScreenManager ne peut pas configurer la gestion des événements pour cela car il gère tous les écrans en tant que GameScreen
s.
Ma question est, comment puis-je changer ma conception afin qu'une modification dans le menu Options ne nécessite pas un redémarrage, mais est immédiatement modifiée? Je demanderais de préférence que mon Game
objet soit mis à jour une fois que le bouton Appliquer est cliqué.