Şu anda Allegro 5 ve boost ile C ++ 11'de bir 2D RPG oluşturuyorum.
Amacım, Seçenekler Menüsünde bir seçenek değiştirildiğinde oyun ayarlarımı bir şekilde güncellemektir. Kullanıcıyı oyunumu yeniden başlatmaya zorlamak istemiyorum. Diğer oyunlar çözünürlüğü değiştirirken veya tam ekrandan pencereye geçerken yeniden başlatılmasını gerektirmez, bu yüzden oyunum da olmamalıdır. Lütfen aşağıdaki sistemin basitleştirilmiş bir görünümüne bakın.
Lütfen Oyun nesnesimi doğrudan OptionsScreen'den çağırmak istemediğimi unutmayın. Kesik çizgi sadece elde etmeye çalıştığım etkiyi göstermek içindir; bir şekilde sistemin farklı bir bölümünde bir seçenek değiştirildiğinde oyunun güncellenmesine neden olabilir.
Detaylı açıklama
ScreenManager GameScreenmevcut durumda olan tüm nesnelerin bir listesini içerir . Bunlar, pop-up'lar da dahil olmak üzere oyunda çeşitli ekranlar olacak. Bu tasarım , C # / XNA'daki Oyun Durumu Yönetimi örneğine az çok yapışır .
Bu ScreenManager, nesneme bir başvuru içeriyor Game. GameNesne başlangıç durumuna getirilir ve değiştirir oyunun ayarları. Çözünürlüğü değiştirmek, tam ekrana geçmek veya Gamesınıfta yapacağım ses seviyesini kapatmak istersem .
Ancak, OptionsScreen şu anda Game sınıfına erişemiyor. Aşağıdaki şemaya bakın:
Bir GameScreen üç olaya işaret edebilir onFinished, onTransitionStartve onTransitionEnd. Hayır, onOptionsChangedçünkü bunu sadece bir ekran yapar. ScreenManager bunun için olay işlemeyi ayarlayamaz çünkü tüm ekranları GameScreens olarak işler .
Sorum şu: Tasarımımı nasıl değiştirebilirim ki OptionsMenu'daki bir değişiklik yeniden başlatma gerektirmez, ancak hemen değiştirilir? Tercihen Gameuygula düğmesine tıklandığında nesnemin güncellenmesini rica ediyorum .


