Tôi hiện đang tạo một game nhập vai 2D trong C ++ 11 với Allegro 5 và boost.
Mục tiêu của tôi là bằng cách nào đó cập nhật cài đặt trò chơi của mình khi một tùy chọn được thay đổi trong Menu Tùy chọn. Tôi không muốn buộc người dùng khởi động lại trò chơi của mình. Các trò chơi khác không yêu cầu khởi động lại khi thay đổi độ phân giải hoặc chuyển từ toàn màn hình sang cửa sổ, vì vậy trò chơi của tôi không nên. Xin vui lòng xem một cái nhìn đơn giản của hệ thống dưới đây.
Xin lưu ý rằng tôi không nhất thiết muốn gọi trực tiếp đối tượng Trò chơi của mình từ OptionsScreen. Đường đứt nét chỉ đơn thuần là để minh họa cho hiệu ứng tôi đang cố gắng đạt được; để bằng cách nào đó gây ra một bản cập nhật của trò chơi khi một tùy chọn được thay đổi trong một phần khác của hệ thống.
Giải thích chi tiết
Trình quản lý màn hình chứa danh sách tất cả GameScreen
các đối tượng hiện đang tồn tại. Đây sẽ là các màn hình khác nhau trong trò chơi bao gồm cả cửa sổ bật lên. Thiết kế này tuân thủ ít nhiều với mẫu Quản lý trạng thái trò chơi trong C # / XNA .
Có ScreenManager
chứa một tham chiếu đến Game
đối tượng của tôi . Đối Game
tượng khởi tạo và sửa đổi cài đặt của trò chơi. Nếu tôi muốn thay đổi độ phân giải, hãy chuyển sang toàn màn hình hoặc tắt tiếng âm lượng tôi sẽ làm trong Game
lớp.
Tuy nhiên, OptionsScreen hiện không thể truy cập lớp Trò chơi. Xem sơ đồ dưới đây:
Một GameScreen có thể báo hiệu ba sự kiện onFinished
, onTransitionStart
và onTransitionEnd
. Không có onOptionsChanged
bởi vì chỉ có một màn hình làm điều đó. Trình quản lý màn hình không thể thiết lập xử lý sự kiện cho việc đó vì nó xử lý tất cả các màn hình dưới dạng GameScreen
s.
Câu hỏi của tôi là, làm thế nào tôi có thể thay đổi thiết kế của mình để thay đổi trong OptionsMothy không yêu cầu khởi động lại, nhưng được thay đổi ngay lập tức? Tôi tốt nhất nên yêu cầu Game
đối tượng của mình cập nhật sau khi nhấn nút áp dụng.