Saat ini saya sedang membuat RPG 2D dalam C ++ 11 dengan Allegro 5 dan boost.
Tujuan saya adalah entah bagaimana memperbarui pengaturan gim saya ketika opsi diubah di Menu Opsi. Saya tidak ingin memaksa pengguna untuk memulai kembali gim saya. Game lain tidak membutuhkan restart saat mengubah resolusi atau beralih dari layar penuh ke windowed, jadi game saya juga tidak. Silakan lihat tampilan yang disederhanakan dari sistem di bawah ini.
Harap dicatat bahwa saya tidak selalu ingin langsung memanggil objek Game saya dari OptionsScreen. Garis putus-putus hanyalah untuk menggambarkan efek yang saya coba capai; entah bagaimana menyebabkan pembaruan game ketika opsi diubah di bagian yang berbeda dari sistem.
Penjelasan detail
ScreenManager berisi daftar semua GameScreen
objek yang saat ini ada. Ini akan menjadi berbagai layar dalam gim termasuk popup. Desain ini mematuhi kurang lebih sampel Manajemen Status Game di C # / XNA .
The ScreenManager
berisi referensi ke saya Game
objek. The Game
objek menginisialisasi dan memodifikasi pengaturan permainan. Jika saya ingin mengubah resolusi, buka layar penuh, atau bisu volume saya akan melakukannya di Game
kelas.
Namun, LayarScreen saat ini tidak dapat mengakses kelas Game. Lihat diagram di bawah ini:
GameScreen dapat memberi sinyal tiga peristiwa onFinished
,, onTransitionStart
dan onTransitionEnd
. Tidak ada onOptionsChanged
karena hanya satu layar yang melakukan itu. ScreenManager tidak dapat mengatur penanganan acara untuk itu karena ia menangani semua layar GameScreen
s.
Pertanyaan saya adalah, bagaimana saya bisa mengubah desain saya sehingga perubahan pada OptionsMenu tidak memerlukan restart, tetapi segera diubah? Saya lebih baik meminta Game
objek saya untuk memperbarui setelah tombol terapkan diklik.