ฉันเริ่มโครงการเกม 'ถูกต้อง' ครั้งแรกของฉันและฉันก็โดนบล็อกที่พยายามตัดสินใจว่าองค์ประกอบของเกมใน XNA ควรสื่อสารอย่างไร
จากเหตุการณ์การเขียนโปรแกรม GUI (Java) GUI ก่อนหน้าตัวจัดการและผู้ฟังดูเหมือนจะเป็นทางไปข้างหน้า ดังนั้นฉันจึงมี Event Bus บางประเภทที่ยอมรับการลงทะเบียนกิจกรรมและคลาสที่สมัครเป็นสมาชิกของกิจกรรมเหล่านั้นพร้อมกับตัวจัดการเพื่อจัดการกับพวกเขา ตัวอย่างเช่น (pseudocode):
class SpriteManager
Update(){
if(player.collidesWith(enemy)
// create new 'PlayerCollisionEvent'
}
class HUDManager
onPlayerCollisionEvent(){
// Update the HUD (reduce lives etc)
}
อย่างไรก็ตามฉันไม่แน่ใจเกี่ยวกับการตั้งค่ารหัส (ใน C #) ที่จะต้องทำสิ่งนี้ให้สำเร็จ อะไรคือสิ่งที่คอยติดตามเหตุการณ์ (รถบัสบางประเภท) และมันมีโครงสร้างอย่างไร
ดูเหมือนจะมีการกล่าวถึงมากมายเกี่ยวกับบริการเกมโดยที่คุณสามารถลงทะเบียน GameComponent ในคลาส Game.cs หลักของคุณจากนั้นดึงข้อมูลจากที่ใดก็ได้ในรหัสของคุณที่มีการอ้างอิงถึงวัตถุ 'เกม' หลัก ฉันได้ลองสิ่งนี้กับวัตถุ SpriteBatch ของฉันแล้วและดูเหมือนง่ายมาก .. อย่างไรก็ตามฉันไม่เห็นว่าสิ่งนี้ยืดหยุ่นได้เหมือนแบบจำลองเหตุการณ์
ยกตัวอย่างเช่นเมื่อศัตรูตาย เราต้องการอัพเดทคะแนนเกม การใช้บริการฉันสามารถรับการอ้างอิงถึงออบเจกต์ StateManager ของฉันที่สร้างขึ้นใน Game1 และเพิ่มเป็นบริการแล้วตั้งค่า 'คะแนน' เป็นค่าใหม่ ฉันคิดว่าเหตุการณ์ 'onEnemyDeath' ซึ่งสามารถจัดการได้แตกต่างกันไปตามคลาสที่หลากหลาย แต่เริ่มต้นด้วยรหัส 1 บรรทัดในส่วน 'การตรวจจับการตายของข้าศึก' ที่เกี่ยวข้องจะดีกว่าการคัดเลือกแต่ละชิ้นที่ต้องการ ต้องมีวิธีการ
หรือกลยุทธ์ที่ด้อยกว่าเหล่านี้เป็นอย่างอื่น?
ฉันรู้ว่านี่เป็นส่วนหนึ่งของความรู้ C # ที่แย่ของฉันมากเท่ากับกระบวนทัศน์การสื่อสารเกม แต่ฉันต้องการทำให้สิ่งพื้นฐานนี้ถูกต้อง
ปรับปรุง
การดูบริการเป็นรายละเอียดที่มากกว่าฉันมั่นใจน้อยกว่า - โดยทั่วไปแล้วมันจะผ่านตัวแปรระดับโลกรอบ ๆ (จากสิ่งที่ฉันเข้าใจ)
อัปเดต 2
ต้องดูที่บทแนะนำพื้นฐานนี้เกี่ยวกับการจัดการเหตุการณ์และทดสอบโค้ดตัวอย่างดูเหมือนว่าเหตุการณ์จะเป็นตัวเลือกที่สมเหตุสมผลสำหรับสิ่งที่ฉันกำลังพูดถึง แต่ฉันไม่ได้ใช้มันมากนักในตัวอย่างที่ฉันเห็น มีบางเหตุผลที่ชัดเจนว่าทำไมไม่ควร?