ฉันยอมรับว่าฉันได้ทำบาปมากเกินไปและแม้กระทั่งการละเมิดมรดก โครงการเกมแรก (ข้อความ) ที่ฉันทำเมื่อฉันเรียนหลักสูตร OOP ไปจนถึง "ล็อคประตู" และ "ปลดล็อคประตู" จาก "ประตู" และ "ห้องที่มีประตูเดียว", "ห้องที่มีสองประตู" และ ต่อจาก "ห้อง"
ด้วยเกม (กราฟิก) ที่ฉันทำงานเมื่อเร็ว ๆ นี้ฉันคิดว่าฉันได้เรียนรู้บทเรียนและ จำกัด การใช้การสืบทอด อย่างไรก็ตามฉันสังเกตเห็นปัญหาเริ่มปรากฏขึ้นในไม่ช้า คลาสรูทของฉันเริ่มขยายตัวมากขึ้นเรื่อย ๆ และคลาสลีฟของฉันก็เต็มไปด้วยรหัสที่ซ้ำกัน
ฉันคิดว่าฉันยังคงทำสิ่งผิดปกติและหลังจากค้นหาทางออนไลน์ฉันพบว่าฉันไม่ใช่คนเดียวที่มีปัญหานี้ มันเป็นวิธีการที่ฉันค้นพบระบบ Entity หลังจากการวิจัยอย่างละเอียด (อ่าน: googlefu)
เมื่อฉันเริ่มอ่านมันฉันก็สามารถเห็นได้อย่างชัดเจนว่ามันสามารถแก้ปัญหาที่ฉันมีกับลำดับชั้นของ OOP ดั้งเดิมที่มีส่วนประกอบ สิ่งเหล่านี้อยู่ในการอ่านครั้งแรกอย่างไรก็ตาม เมื่อผมเจอมากขึ้น ... “รุนแรง” ES แนวทางดังกล่าวเป็นหนึ่งในT-เครื่อง
ฉันเริ่มไม่เห็นด้วยกับวิธีการที่พวกเขาใช้ ระบบองค์ประกอบที่บริสุทธิ์นั้นดูเหมือนจะเกินกำลังหรือไม่สามารถใช้งานได้ง่ายซึ่งอาจเป็นจุดแข็งของ OOP ผู้เขียนบอกว่าระบบ ES เป็นสิ่งที่ตรงกันข้ามกับ OOP และแม้ว่ามันจะสามารถใช้งานได้ใน OOP แต่ก็ไม่ควร ฉันไม่ได้พูดว่ามันผิด แต่ฉันไม่รู้สึกเหมือนเป็นวิธีแก้ปัญหาที่ฉันต้องการนำไปใช้
ดังนั้นสำหรับฉันและเพื่อแก้ปัญหาที่ฉันมีในตอนต้นของการโพสต์โดยไม่ขัดต่อสัญชาติญาณของฉันคือการใช้ลำดับชั้น แต่ก็จะไม่เป็นลำดับชั้นแบบเสาหินเหมือนที่ฉันเคยใช้มาก่อน polylithic one (ฉันไม่สามารถหาคำที่ตรงข้ามกับเสาหิน) ซึ่งประกอบด้วยต้นไม้ขนาดเล็กจำนวนมาก
ตัวอย่างต่อไปนี้แสดงสิ่งที่ฉันหมายถึง (เป็นแรงบันดาลใจจากตัวอย่างที่ฉันพบใน Game Engine Architecture ตอนที่ 14)
ฉันจะมีต้นไม้เล็ก ๆ สำหรับยานพาหนะ คลาสรูทยานพาหนะจะมีองค์ประกอบการเรนเดอร์ส่วนประกอบการชนส่วนประกอบตำแหน่ง ฯลฯ
จากนั้นรถถัง subclass ของยานพาหนะจะสืบทอดส่วนประกอบเหล่านั้นจากนั้นและจะได้รับมันเป็นองค์ประกอบ "ปืนใหญ่" ของตัวเอง
เช่นเดียวกับตัวละคร ตัวละครจะมีส่วนประกอบเป็นของตัวเองจากนั้นระดับผู้เล่นจะรับช่วงและรับตัวควบคุมอินพุตในขณะที่คลาสศัตรูอื่นจะสืบทอดจากคลาสของตัวละครและได้รับตัวควบคุม AI
ฉันไม่เห็นปัญหาใด ๆ กับการออกแบบนี้ แม้จะไม่ได้ใช้ระบบควบคุม Entity ที่บริสุทธิ์ปัญหาเกี่ยวกับเอฟเฟกต์ bubbling up และคลาสรูทขนาดใหญ่สามารถแก้ไขได้โดยการใช้ลำดับชั้นแบบหลายทรีและปัญหาของโค้ดที่ซ้ำกันจะหายไปเนื่องจากใบไม้ไม่ได้ มีรหัสใด ๆ ที่จะเริ่มต้นด้วยองค์ประกอบเพียง หากจำเป็นต้องทำการเปลี่ยนแปลงในระดับลีฟการเปลี่ยนองค์ประกอบเพียงอย่างเดียวนั้นง่ายกว่าการเปลี่ยนรหัสวางทุกที่
แน่นอนว่าไม่มีประสบการณ์เหมือนฉันฉันไม่เห็นปัญหาใด ๆ เมื่อฉันเริ่มใช้ลำดับชั้นเดียวรุ่นที่สืบทอดหนัก ๆ ดังนั้นถ้ามีปัญหากับโมเดลที่ฉันกำลังคิดว่าจะนำไปใช้ สามารถดูได้
ความคิดเห็นของคุณ?
PS: ฉันกำลังใช้ Java ดังนั้นการใช้การสืบทอดหลายอย่างเพื่อนำสิ่งนี้ไปใช้แทนการใช้ส่วนประกอบปกติเป็นไปไม่ได้
PPS: การสื่อสารระหว่างส่วนประกอบจะกระทำโดยการเชื่อมโยงส่วนประกอบที่พึ่งพากันเข้าด้วยกัน สิ่งนี้จะนำไปสู่การแต่งงานกัน แต่ฉันคิดว่าการแลกเปลี่ยนเป็นเรื่องปกติ