ใน 2D หรือ 3D ระบบคอมโพเนนต์ของเอนทิตี (ECS) อย่างน้อยควรมีการเข้าถึงระบบ GUI หากไม่ใช่ส่วนหนึ่งของ ECS เดียวกัน
โดยส่วนตัวแล้วฉันจะไม่ผสมทั้งสองอย่าง ความสามารถในการใช้รหัสสำหรับ GUI นั้นเกิดขึ้นจริงที่ระดับบนสุดเท่านั้น ตอบสนองต่อเมาส์ / คีย์บอร์ดการเรนเดอร์และอื่น ๆ ฟังก์ชั่นที่ใช้ปุ่มที่แตกต่างกันหรือข้อมูลที่แสดงรายการบางอย่างไม่ได้เป็นสิ่งที่สามารถสร้างให้พอที่จะนำมาใช้ซ้ำได้
ตัวอย่างเช่นผมจะคิดส่วนประกอบสำหรับหน่วยงานที่ GUI จะเป็นสิ่งที่ชอบposition
, และrender
gui
โดยที่องค์ประกอบของ GUI จะกำหนดประเภทของการดำเนินการที่ผู้ใช้ GUI ทำ อย่างไรก็ตามการกระทำนั้นจะมีลักษณะเฉพาะและบริบทที่เฉพาะเจาะจง ผลลัพธ์นี้ในระบบที่จัดการส่วนประกอบ GUI ที่มีขนาดใหญ่มากและได้รับการออกแบบมาเพื่อจัดการฟังก์ชัน GUI แต่ละตัว (โหลดเกม, บันทึกเกม, ค้นหาเซิร์ฟเวอร์ ฯลฯ ) ฟังดูวุ่นวาย
ฉันต้องการทำไฟล์คลาสมาตรฐานสำหรับแต่ละ GUI "หน้าจอ" มีฟังก์ชั่นทั้งหมดสำหรับหน้าจอนั้นในที่เดียว (โดยอ้างอิงกับคลาสฟังก์ชั่นทั่วไป) มันเยอะมากและง่ายต่อการจัดการ
อย่างไรก็ตามอย่างที่ฉันบอกว่า ECS ควรมีสิทธิ์เข้าถึงระบบ GUI จะต้องสามารถให้ข้อมูลกับ GUI ตามเอนทิตีในระบบของมัน ตัวอย่างเช่นการโฮเวอร์เหนือหน่วยพันธมิตรจะปรากฏขึ้นหน้าต่าง GUI พร้อมข้อมูลทั้งหมดเกี่ยวกับหน่วยนั้น ในกรณีที่วางเมาส์เหนือความสามัคคีของศัตรูจะปรากฏหน้าต่าง GUI พร้อมข้อมูลที่ จำกัด คุณอาจไม่ต้องการตั้งโปรแกรม GUI เพื่อให้ทราบถึงความแตกต่างระหว่างสองสิ่งนี้คุณต้องการให้เอนทิตีแสดงข้อมูล
ดังนั้นเอนทิตีจะยังคงมีองค์ประกอบ GUI อยู่บ้าง แต่จะเป็นเอนทิตี "ในเกม" ไม่ใช่เอนทิตี GUI ส่วนนี้จะใช้ระบบ GUI ภายนอกเพื่อสร้างส่วนต่อประสาน GUI