ขณะนี้ฉันกำลังสร้าง 2D RPG ใน C ++ 11 ด้วย Allegro 5 และเพิ่ม
เป้าหมายของฉันคือการปรับปรุงการตั้งค่าเกมของฉันเมื่อมีการเปลี่ยนตัวเลือกในเมนูตัวเลือก ฉันไม่ต้องการบังคับให้ผู้ใช้รีสตาร์ทเกม เกมอื่นไม่จำเป็นต้องรีสตาร์ทเมื่อเปลี่ยนความละเอียดหรือเปลี่ยนจากเต็มหน้าจอเป็นหน้าต่างดังนั้นเกมของฉันก็ไม่ควรทำเช่นเดียวกัน โปรดดูมุมมองที่เรียบง่ายของระบบด้านล่าง
โปรดทราบว่าฉันไม่ต้องการเรียกวัตถุเกมของฉันโดยตรงจาก OptionsScreen เส้นประเป็นเพียงเพื่อแสดงให้เห็นถึงผลกระทบที่ฉันพยายามทำ เพื่อทำให้เกิดการปรับปรุงของเกมเมื่อมีการเปลี่ยนตัวเลือกในส่วนต่าง ๆ ของระบบ
คำอธิบายโดยละเอียด
ScreenManager มีรายการของGameScreen
วัตถุทั้งหมดที่มีอยู่ในปัจจุบัน เหล่านี้จะเป็นหน้าจอต่าง ๆ ในเกมรวมถึงป๊อปอัป การออกแบบนี้จะปฏิบัติตามมากหรือน้อยไปตัวอย่างการจัดการสถานะของเกมใน C
ScreenManager
มีการอ้างอิงถึงฉันGame
วัตถุ Game
initializes วัตถุและแก้ไขการตั้งค่าเกม หากฉันต้องการเปลี่ยนความละเอียดให้ใช้งานแบบเต็มหน้าจอหรือปิดเสียงที่ฉันควรทำในGame
ชั้นเรียน
อย่างไรก็ตามปัจจุบัน OptionsScreen ไม่สามารถเข้าถึงคลาสเกมได้ ดูแผนภาพด้านล่าง:
GameScreen สามารถส่งสัญญาณสามเหตุการณ์onFinished
, และonTransitionStart
onTransitionEnd
ไม่มีonOptionsChanged
เพราะมีเพียงหน้าจอเดียวเท่านั้นที่ทำเช่นนั้น ScreenManager ไม่สามารถตั้งค่าการจัดการเหตุการณ์สำหรับสิ่งนั้นเพราะมันจัดการหน้าจอทั้งหมดเป็นGameScreen
s
คำถามของฉันคือฉันจะเปลี่ยนการออกแบบของฉันอย่างไรเพื่อให้การเปลี่ยนแปลงใน OptionsMenu ไม่ต้องการการรีสตาร์ท แต่จะเปลี่ยนทันที ฉันควรขอให้Game
วัตถุของฉันอัปเดตเมื่อคลิกปุ่มนำไปใช้