Atualmente, estou criando um RPG 2D em C ++ 11 com Allegro 5 e boost.
Meu objetivo é atualizar de alguma forma as configurações do meu jogo quando uma opção é alterada no menu Opções. Não quero forçar o usuário a reiniciar meu jogo. Outros jogos não precisam ser reiniciados ao alterar a resolução ou passar da tela cheia para a janela, então meu jogo também não deveria. Por favor, veja uma visão simplificada do sistema abaixo.
Observe que não estou necessariamente querendo chamar diretamente meu objeto de jogo a partir do OptionsScreen. A linha pontilhada é meramente ilustrar o efeito que estou tentando alcançar; de alguma forma causar uma atualização do jogo quando uma opção é alterada em uma parte diferente do sistema.
Explicação detalhada
O ScreenManager contém uma lista de todos os GameScreen
objetos existentes no momento. Estas serão várias telas do jogo, incluindo pop-ups. Esse design adere mais ou menos à amostra Game State Management em C # / XNA .
O ScreenManager
contém uma referência ao meu Game
objeto. O Game
objeto inicializa e modifica as configurações do jogo. Se eu quiser alterar a resolução, ficar em tela cheia ou silenciar o volume, eu o faria na Game
aula.
No entanto, o OptionsScreen atualmente não pode acessar a classe Game. Veja o diagrama abaixo:
A GameScreen pode sinalizar três eventos, onFinished
, onTransitionStart
e onTransitionEnd
. Não existe onOptionsChanged
porque apenas uma tela faz isso. O ScreenManager não pode configurar a manipulação de eventos para isso porque lida com todas as telas como GameScreen
s.
Minha pergunta é: como posso alterar meu design para que uma alteração no OptionsMenu não exija reinicialização, mas que seja alterada imediatamente? Eu preferiria solicitar que meu Game
objeto fosse atualizado assim que o botão Aplicar fosse clicado.