หลังจากถามคำถามสองข้อเกี่ยวกับระบบเอนทิตี ( 1 , 2 ) และอ่านบทความเกี่ยวกับพวกเขาฉันคิดว่าฉันเข้าใจพวกเขาดีขึ้นกว่า แต่ก่อน ฉันยังมีความไม่แน่นอนอยู่บ้างส่วนใหญ่เกี่ยวกับการสร้างตัวส่งอนุภาคระบบอินพุตและกล้อง เห็นได้ชัดว่าฉันยังคงมีปัญหาในการทำความเข้าใจกับระบบเอนทิตีและพวกเขาอาจนำไปใช้กับวัตถุช่วงอื่น ๆ ทั้งหมด แต่ฉันเลือกสามข้อนี้เพราะมันเป็นแนวคิดที่แตกต่างกันมาก จัดการปัญหาเช่นนี้ด้วยตัวเองเมื่อพวกเขามา
ฉันกำลังสร้างเอ็นจิ้นใน JavaScript และฉันได้นำคุณสมบัติหลักมาใช้ซึ่งรวมถึง: การจัดการอินพุต, ระบบภาพเคลื่อนไหวที่ยืดหยุ่น, ตัวส่งอนุภาค, คลาสคณิตศาสตร์และฟังก์ชั่น, การจัดการฉาก, กล้องและเรนเดอร์ ของสิ่งอื่น ๆ ที่เครื่องยนต์มักจะสนับสนุน ฉันอ่านคำตอบของ Byte56 ซึ่งทำให้ฉันสนใจที่จะทำให้เครื่องยนต์กลายเป็นระบบเอนทิตี มันจะยังคงเป็นเอ็นจิ้นเกม HTML5 ที่มีปรัชญาฉากพื้นฐาน แต่ควรสนับสนุนการสร้างเอนทิตีจากส่วนประกอบ
ปัญหาที่ฉันมีตอนนี้คือปรับแนวคิดเครื่องยนต์เก่าของฉันให้เข้ากับกระบวนทัศน์การเขียนโปรแกรมใหม่นี้ นี่คือคำจำกัดความบางส่วนจากคำถามก่อนหน้านี้ที่อัปเดต:
Entityเป็นตัวระบุ มันไม่มีข้อมูลใด ๆ ไม่ใช่วัตถุมันเป็นรหัสง่าย ๆ ที่แสดงดัชนีในรายการฉากของเอนทิตีทั้งหมด (ซึ่งจริง ๆ แล้วฉันวางแผนที่จะใช้เป็นเมทริกซ์คอมโพเนนต์)
ตัวแทนเป็นผู้ถือข้อมูล แต่ด้วยวิธีการที่สามารถทำงานกับข้อมูลที่ ตัวอย่างที่ดีที่สุดคือองค์ประกอบ
Vector2D
หรือ "ตำแหน่ง" มันมีข้อมูล:x
และy
แต่ยังมีบางส่วนวิธีการที่ทำให้การดำเนินงานเกี่ยวกับข้อมูลง่ายขึ้นเล็กน้อย:add()
,normalize()
และอื่น ๆระบบเป็นสิ่งที่สามารถดำเนินการบนชุดของหน่วยงานที่ตอบสนองความต้องการบางอย่าง; โดยปกติเอนทิตีจะต้องมีชุดของคอมโพเนนต์ที่ระบุเพื่อดำเนินการ ระบบเป็นส่วน "ตรรกะ" ส่วน "อัลกอริทึม" ฟังก์ชั่นทั้งหมดที่จัดทำโดยส่วนประกอบที่มีไว้สำหรับการจัดการข้อมูลได้ง่ายขึ้น
กล้อง
กล้องมีVector2D
คุณสมบัติตำแหน่งคุณสมบัติการหมุนและวิธีการบางอย่างสำหรับการจัดตำแหน่งให้อยู่กึ่งกลางจุด แต่ละเฟรมจะถูกป้อนให้กับโหมดแสดงภาพพร้อมกับฉากและวัตถุทั้งหมดจะถูกแปลตามตำแหน่งของมัน จากนั้นฉากจะแสดงผล
ฉันจะแสดงวัตถุชนิดนี้ในระบบเอนทิตีได้อย่างไร กล้องจะเป็นนิติบุคคลองค์ประกอบหรือชุดค่าผสม (ตามคำตอบของฉัน) หรือไม่
ตัวส่งอนุภาค
ปัญหาที่ฉันมีกับตัวส่งอนุภาคคืออีกครั้งสิ่งที่ควรเป็น ฉันค่อนข้างแน่ใจว่าตัวอนุภาคเองไม่ควรเป็นนิติบุคคลเพราะฉันต้องการสนับสนุนพวกเขามากกว่า 10,000 คนและฉันเชื่อว่าการสร้างเอนทิตีจำนวนมากจะส่งผลกระทบต่อประสิทธิภาพการทำงานของฉันอย่างมาก
ฉันจะแสดงวัตถุชนิดนี้ในระบบเอนทิตีได้อย่างไร
ผู้จัดการการป้อนข้อมูล
อันสุดท้ายที่ฉันอยากพูดถึงคือวิธีจัดการอินพุต Input
ในรุ่นปัจจุบันของฉันของเครื่องยนต์ที่มีระดับที่เรียกว่า มันเป็นตัวจัดการที่สมัครสมาชิกกับเหตุการณ์เบราว์เซอร์เช่นการกดปุ่มและการเปลี่ยนตำแหน่งเมาส์และยังรักษาสถานะภายใน จากนั้นคลาสผู้เล่นมีreact()
วิธีการซึ่งยอมรับวัตถุอินพุตเป็นอาร์กิวเมนต์ ข้อดีของการทำเช่นนี้คือวัตถุอินพุตอาจถูกจัดลำดับเป็น. JSON แล้วแชร์ผ่านเครือข่ายเพื่อให้สามารถจำลองแบบผู้เล่นหลายคนได้อย่างราบรื่น
สิ่งนี้แปลเป็นระบบเอนทิตีได้อย่างไร