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 GameScreenobjets 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 ScreenManagercontient une référence à mon Gameobjet. L' Gameobjet 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 Gameclasse.
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, onTransitionStartet onTransitionEnd. Il n'y en a pas onOptionsChangedparce 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 GameScreens.
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 Gameobjet soit mis à jour une fois que le bouton Appliquer est cliqué.


