ฉันกำลังพยายามออกแบบระบบเอนทิตีที่อิงองค์ประกอบเพื่อการเรียนรู้ (และใช้ในภายหลังในบางเกม) และฉันมีปัญหาบางอย่างเมื่อต้องอัพเดตสถานะเอนทิตี
ฉันไม่ต้องการให้มีการอัปเดตวิธี () ภายในคอมโพเนนต์เพื่อป้องกันการพึ่งพาระหว่างคอมโพเนนต์
สิ่งที่ฉันมีอยู่ในใจในขณะนี้คือส่วนประกอบเก็บข้อมูลและส่วนประกอบการปรับปรุงระบบ
ดังนั้นถ้าฉันมีเกม 2D ง่าย ๆ ที่มีบางหน่วยงาน (เช่นผู้เล่น, ศัตรู 1, ศัตรู 2) ที่มีองค์ประกอบการแปลง, การเคลื่อนไหว, สถานะ, ภาพเคลื่อนไหวและการแสดงผลฉันคิดว่าฉันควรจะมี:
- MovementSystem ที่จะทำการเคลื่อนย้ายส่วนประกอบการเคลื่อนไหวทั้งหมดและอัพเดทส่วนประกอบของรัฐ
- และ RenderSystem ที่อัพเดทองค์ประกอบภาพเคลื่อนไหว (องค์ประกอบภาพเคลื่อนไหวควรมีภาพเคลื่อนไหวหนึ่งภาพ (เช่นชุดของเฟรม / พื้นผิว) สำหรับแต่ละรัฐและอัปเดตหมายถึงการเลือกภาพเคลื่อนไหวที่สอดคล้องกับสถานะปัจจุบัน (เช่นการกระโดด, moving_left ฯลฯ ) และ อัปเดตดัชนีเฟรม) จากนั้น RenderSystem จะอัปเดตส่วนประกอบ Render ด้วยพื้นผิวที่สอดคล้องกับเฟรมปัจจุบันของ Animation ของแต่ละกิจการและแสดงทุกอย่างบนหน้าจอ
ฉันเห็นการใช้งานบางอย่างเช่นกรอบงานของ Artemis แต่ฉันไม่รู้วิธีแก้ปัญหานี้:
สมมติว่าเกมของฉันมีเอนทิตีต่อไปนี้ แต่ละเอนทิตีมีชุดสถานะและภาพเคลื่อนไหวหนึ่งรายการสำหรับแต่ละสถานะ:
- ผู้เล่น: "ไม่ได้ใช้งาน", "moving_right", "กระโดด"
- ศัตรู 1: "moving_up", "moving_down"
- ศัตรู 2: "moving_left", "moving_right"
อะไรคือวิธีการที่ได้รับการยอมรับมากที่สุดเพื่ออัพเดทสถานะปัจจุบันของแต่ละเอนทิตี สิ่งเดียวที่ฉันคิดได้คือการมีระบบแยกต่างหากสำหรับแต่ละกลุ่มของเอนทิตีและแยกสถานะและส่วนประกอบภาพเคลื่อนไหวดังนั้นฉันจะมี PlayerState, PlayerAnimation, Enemy1State, Enemy1Animation ... PlayerMovementSystem, PlayerRenderingSystem ... แต่ฉันคิดว่านี่เป็นสิ่งที่ไม่ดี วิธีการแก้ปัญหาและทำลายวัตถุประสงค์ของการมีระบบที่ใช้องค์ประกอบ
อย่างที่คุณเห็นฉันค่อนข้างหลงทางที่นี่ดังนั้นฉันจึงขอขอบคุณสำหรับความช่วยเหลือ
แก้ไข:ฉันคิดว่าวิธีแก้ปัญหาในการทำให้งานนี้เป็นไปตามที่ฉันตั้งใจไว้:
คุณสร้างคอมโพเนนต์และแอนิเมชั่นที่เป็นส่วนประกอบทั่วไปมากพอที่จะใช้สำหรับเอนทิตีทั้งหมด ข้อมูลที่พวกเขามีจะเป็นตัวดัดแปลงสำหรับการเปลี่ยนแปลงสิ่งต่างๆเช่นภาพเคลื่อนไหวที่เล่นหรือสถานะที่มีอยู่ - Byte56
ตอนนี้ฉันกำลังพยายามหาวิธีออกแบบส่วนประกอบทั้งสองนี้ให้เพียงพอเพื่อให้ฉันสามารถนำกลับมาใช้ใหม่ได้ อาจมี UID สำหรับแต่ละรัฐ (เช่นการเดินการวิ่ง ... ) และการจัดเก็บภาพเคลื่อนไหวในแผนที่ไปยัง AnimationComponent ที่รหัสตัวระบุนี้เป็นทางออกที่ดี?
statecomponent
และanimationcomponent
ทั่วไปเพียงพอที่จะใช้สำหรับเอนทิตีทั้งหมด ข้อมูลที่พวกเขามีจะเป็นตัวดัดแปลงสำหรับการเปลี่ยนแปลงสิ่งต่างๆเช่นภาพเคลื่อนไหวที่เล่นหรือสถานะที่มีอยู่