Ş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 GameScreen
mevcut 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
. Game
Nesne başlangıç durumuna getirilir ve değiştirir oyunun ayarları. Çözünürlüğü değiştirmek, tam ekrana geçmek veya Game
sı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
, onTransitionStart
ve onTransitionEnd
. Hayır, onOptionsChanged
çünkü bunu sadece bir ekran yapar. ScreenManager bunun için olay işlemeyi ayarlayamaz çünkü tüm ekranları GameScreen
s 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 Game
uygula düğmesine tıklandığında nesnemin güncellenmesini rica ediyorum .