ฉันค่อนข้างใหม่กับแนวคิดของระบบเอนทิตีที่ได้อ่านสิ่งต่าง ๆ (ส่วนใหญ่เป็นประโยชน์บล็อกที่ยอดเยี่ยมนี้และคำตอบนี้ )
แม้ว่าฉันจะมีปัญหาเล็กน้อยในการทำความเข้าใจว่าบางสิ่งง่าย ๆ เช่นเดียวกับที่สามารถจัดการตำแหน่งของวัตถุด้วยแหล่งที่มาที่ไม่ได้กำหนดจำนวนมาก
นั่นคือฉันมีหน่วยงานของฉันซึ่งมีองค์ประกอบตำแหน่ง ฉันมีเหตุการณ์บางอย่างในเกมที่บอกเอนทิตีนี้ให้ย้ายระยะทางที่กำหนดในเวลาที่กำหนด
เหตุการณ์เหล่านี้สามารถเกิดขึ้นได้ตลอดเวลาและจะมีค่าแตกต่างกันสำหรับตำแหน่งและเวลา ผลก็คือพวกเขาจะรวมกัน
ในโซลูชัน OO แบบดั้งเดิมฉันมีMoveBy
คลาสบางประเภทที่มีระยะทาง / เวลาและอาเรย์ของผู้ที่อยู่ในคลาสอ็อบเจ็กต์เกมของฉัน แต่ละเฟรมฉันจะวนซ้ำทั้งหมดMoveBy
และนำไปใช้กับตำแหน่ง หาก a MoveBy
ถึงเวลาสิ้นสุดแล้วให้ลบออกจากอาร์เรย์
ด้วยระบบเอนทิตี้ฉันสับสนนิดหน่อยว่าฉันควรทำซ้ำพฤติกรรมแบบนี้อย่างไร
หากมีเพียงหนึ่งในเหล่านี้ในแต่ละครั้งแทนที่จะสามารถรวมพวกเขาเข้าด้วยกันมันก็จะค่อนข้างตรงไปตรงมา (ฉันเชื่อ) และมีลักษณะเช่นนี้:
PositionComponent
มี x, y
MoveByComponent
มี x, y, time
Entity
ซึ่งมีทั้งPositionComponent
และMoveByComponent
MoveBySystem
ที่รูปลักษณ์สำหรับนิติบุคคลที่มีทั้งส่วนประกอบเหล่านี้และเพิ่มมูลค่าของไปMoveByComponent
PositionComponent
เมื่อtime
ถึงมันจะลบองค์ประกอบจากเอนทิตีนั้น
ฉันสับสนเล็กน้อยว่าฉันจะทำสิ่งเดียวกันได้อย่างไรด้วยการเคลื่อนไหวหลายอย่างด้วยกัน
ความคิดเริ่มต้นของฉันคือฉันจะมี:
PositionComponent
, MoveByComponent
เช่นเดียวกับข้างต้น
MoveByCollectionComponent
ซึ่งมีอาร์เรย์ของMoveByComponent
s
MoveByCollectionSystem
ที่มองหาเอนทิตีที่มีPositionComponent
และ a MoveByCollectionComponent
, วนซ้ำMoveByComponent
s ข้างในนั้น, ใช้ / ลบตามความจำเป็น
ฉันเดาว่านี่เป็นปัญหาทั่วไปมากขึ้นของการมีองค์ประกอบเดียวกันจำนวนมากและต้องการให้ระบบที่เกี่ยวข้องดำเนินการกับแต่ละองค์ประกอบ เอนทิตีของฉันมีส่วนประกอบอยู่ภายในแฮชของประเภทคอมโพเนนต์ -> ส่วนประกอบดังนั้นจึงมีองค์ประกอบของประเภทใดประเภทหนึ่งต่อเอนทิตีอย่างเคร่งครัดเท่านั้น
นี่เป็นวิธีที่ถูกต้องหรือไม่
เอนทิตีควรมีองค์ประกอบหนึ่งประเภทที่กำหนดตลอดเวลาหรือไม่?
move x by 10 in 2 seconds
และmove x by -10 in 2 seconds
เอนทิตีจะหยุดนิ่งอย่างสมบูรณ์?
MoveBy
ฟังก์ชั่นเป็นเพียงแค่ความเร็ว? ดูเหมือนคุณจะอยู่ในเส้นทางที่ถูกต้อง สำหรับคำถามที่สองของคุณมีการใช้งานที่แตกต่างกันมากมายของระบบเอนทิตี / ส่วนประกอบ สิ่งที่อธิบายไว้ในคำตอบของฉันที่คุณเชื่อมโยงจะมีองค์ประกอบหนึ่งประเภทเท่านั้น