ขณะนี้ฉันกำลังประสบปัญหาต่อไปนี้:
ฉันพยายามเขียน pong clone โดยใช้ระบบ component component (ECS) ฉันเขียน "กรอบงาน" ทั้งหมดด้วยตัวเอง ดังนั้นจึงมีคลาสที่จัดการเอนทิตีกับส่วนประกอบทั้งหมด จากนั้นจะมีคลาสคอมโพเนนต์เอง และสุดท้ายก็มีระบบของฉันที่เพิ่งได้รับเอนทิตีทั้งหมดที่มีส่วนประกอบที่ระบบต้องการ
ตัวอย่างเช่นระบบการเคลื่อนไหวของฉันค้นหาหน่วยงานทั้งหมดที่มีองค์ประกอบตำแหน่งและส่วนประกอบการเคลื่อนไหว องค์ประกอบตำแหน่งเพียงแค่ดำรงตำแหน่งและองค์ประกอบการเคลื่อนไหวจะเก็บความเร็ว
แต่ปัญหาที่แท้จริงคือระบบการชนของฉัน ชั้นนี้เป็นเหมือนหยดตรรกะ ฉันมีคดีพิเศษมากมายในชั้นนี้
ตัวอย่างเช่น: พายของฉันสามารถชนกับเส้นขอบได้ หากสิ่งนี้เกิดขึ้นความเร็วของพวกเขาจะถูกตั้งค่าเป็นศูนย์ ลูกของฉันสามารถชนกับเส้นเขตแดนได้เช่นกัน แต่ในกรณีนี้ความเร็วของมันจะถูกสะท้อนกลับตามปกติของเส้นขอบดังนั้นมันจึงสะท้อนออกมา เมื่อต้องการทำสิ่งนี้ฉันได้ให้องค์ประกอบฟิสิกส์พิเศษแก่ลูกบอลซึ่งเพิ่งบอกว่า: "เฮ้สิ่งนี้ไม่หยุดเลยมันสะท้อน" ดังนั้นองค์ประกอบทางฟิสิกส์ไม่มีข้อมูลจริง มันเป็นคลาสที่ว่างเปล่าซึ่งมีเพียงเพื่อบอกระบบว่าวัตถุสะท้อนหรือหยุด
จากนั้นก็มาที่นี่: ฉันต้องการที่จะทำให้อนุภาคบางอย่างเมื่อลูกชนกับไม้พายหรือเส้นขอบ ดังนั้นฉันคิดว่าลูกบอลจะต้องมีส่วนประกอบอื่นที่บอกระบบการชนเพื่อสร้างอนุภาคในการชน
จากนั้นฉันต้องการมี ups พลังงานซึ่งสามารถชนกับไม้พายได้ แต่ไม่ใช่กับเส้นขอบ หากเกิดเหตุการณ์เช่นนี้การเพิ่มพลังจะต้องหายไป ดังนั้นฉันจึงต้องการเคสและส่วนประกอบมากขึ้น (เพื่อบอกระบบว่าบางหน่วยงานสามารถชนกับคนอื่น ๆ ได้บางคนบอทไม่ได้อยู่ด้วยแม้ว่าคนอื่น ๆ จะสามารถชนกันได้จริง ๆ และระบบชนก็ต้องใช้พลังงาน -ups ไม้พายเป็นต้นและอื่น ๆ )
ฉันเห็นว่าระบบองค์ประกอบของเอนทิตีเป็นสิ่งที่ดีเพราะมีความยืดหยุ่นและคุณไม่มีปัญหาเกี่ยวกับการสืบทอด แต่ตอนนี้ฉันติดอยู่ทั้งหมด
ฉันคิดว่าซับซ้อนเกินไปหรือไม่ ฉันจะรับมือกับปัญหานี้ได้อย่างไร
แน่นอนว่าฉันต้องสร้างระบบที่รับผิดชอบ "post-collision" จริง ๆ ดังนั้นระบบ collision จะบอกเฉพาะ "ใช่เรามีการชนกันในเฟรมสุดท้าย" แล้วมีระบบ "post-collision" ซึ่งมีหลายระบบ ทั้งหมดต้องการส่วนประกอบที่แตกต่างกัน (รวมกัน) แล้วเปลี่ยนส่วนประกอบ ตัวอย่างเช่นจะมีการเคลื่อนไหวของระบบหลังการชนซึ่งจะหยุดสิ่งที่ต้องหยุดเมื่อเกิดการชน จากนั้นระบบฟิสิกส์หลังการชนซึ่งสะท้อนสิ่งต่าง ๆ เป็นต้น
แต่นี่ดูเหมือนจะไม่ใช่วิธีที่เหมาะสมสำหรับฉันเช่นกันเพราะตัวอย่างเช่น:
- ระบบหลังการชนกันของการเคลื่อนไหวของฉันต้องการหน่วยงานที่มีองค์ประกอบตำแหน่งส่วนประกอบการเคลื่อนไหวและส่วนประกอบการชนกัน จากนั้นมันจะตั้งค่าความเร็วของเอนทิตีเป็นศูนย์
- ระบบฟิสิกส์หลังการชนจะต้องการเอนทิตีที่มีองค์ประกอบตำแหน่ง, ส่วนประกอบการเคลื่อนไหว, ส่วนประกอบการชนและส่วนประกอบฟิสิกส์ จากนั้นมันก็จะสะท้อนเวกเตอร์ความเร็ว
ปัญหาชัดเจน: การเคลื่อนไหวหลังชนต้องหน่วยงานที่เป็นส่วนย่อยของหน่วยงานในระบบฟิสิกส์โพสต์ชน ดังนั้นระบบการชนกันสองระบบจะทำงานกับข้อมูลเดียวกันผลที่ได้คือ: แม้ว่าเอนทิตีจะมีองค์ประกอบด้านฟิสิกส์ แต่ความเร็วจะเป็นศูนย์หลังจากการชน
ปัญหาเหล่านี้ได้รับการแก้ไขโดยทั่วไปในระบบส่วนประกอบของเอนทิตีอย่างไร ปัญหาเหล่านั้นเป็นปกติหรือว่าฉันกำลังทำอะไรผิดหรือเปล่า? ถ้าใช่ควรทำอย่างไรและควรทำอย่างไร?