ฉันกำลังจะเขียนโปรแกรม Mario ใน Java ฉันกำลังคิดเกี่ยวกับการเป็นตัวแทน 2 ครั้ง / โครงสร้างข้อมูลสำหรับระดับ แต่ฉันไม่แน่ใจว่าควรเลือกแบบใด:
- อาร์เรย์จำนวนเต็ม 2D
- ควอดทรีเพื่อแบ่งระดับเป็นชิ้น ๆ
อะไรคือข้อดีและข้อเสีย?
ฉันกำลังจะเขียนโปรแกรม Mario ใน Java ฉันกำลังคิดเกี่ยวกับการเป็นตัวแทน 2 ครั้ง / โครงสร้างข้อมูลสำหรับระดับ แต่ฉันไม่แน่ใจว่าควรเลือกแบบใด:
อะไรคือข้อดีและข้อเสีย?
คำตอบ:
จุดของควอดทรีคือการกำจัดชิ้นข้อมูลขนาดใหญ่อย่างมีประสิทธิภาพเพื่อให้คุณใช้เวลากับข้อมูลในบริเวณใกล้เคียงเท่านั้น อย่างไรก็ตามอาร์เรย์ 2D ให้การเข้าถึงแบบสุ่มเฉพาะตำแหน่งของคุณอยู่แล้วดังนั้นสำหรับเกม 2D ที่อาจทำให้เกิดควอดทรีซ้ำซ้อน ในเกม 3D คุณไม่สามารถใช้อาเรย์เพื่อค้นหาทุกสิ่งและนั่นคือจุดที่ควอดทรี
ตอนนี้ฉันกำลังพูดถึงที่นี่เกี่ยวกับการแสดงข้อมูลพื้นฐานสำหรับระดับ ขึ้นอยู่กับการตั้งค่าสถาปัตยกรรมกราฟิกของคุณ (เช่นการทำกราฟิก 2D กับเครื่องบินในเอนจิ้น 3 มิติ) คุณอาจต้องการใช้ควอดทรีในกราฟซีนเพื่อคัดเนื้อหากราฟิกที่มีประสิทธิภาพ
และอย่าลืมศัตรูและวัตถุโต้ตอบอื่น ๆ ในระดับของคุณ บางทีคุณอาจใช้อาร์เรย์ 2 มิติในการจัดการไทล์ของระดับ แต่ใช้ quadtrees เพื่อจัดระเบียบองค์ประกอบแบบโต้ตอบทั้งหมด (เช่นสำหรับเครื่องยนต์ฟิสิกส์)
ลองใช้วิธีนี้: เลือกจุดโดยการสุ่มในระดับของคุณแล้วลองคิดดูว่าจะต้องใช้ความพยายามมากแค่ไหนในการคำนวณทุกสิ่งภายในรัศมี 1,000 พิกเซลของจุดนั้น หากคุณสามารถทำได้อย่างรวดเร็วเพราะทุกอย่างจัดตามสถานที่ในอาเรย์แบบสองมิติคุณไม่จำเป็นต้องใช้ควอดทรี อย่างไรก็ตามหากคุณต้องวนซ้ำทุกอย่างและตรวจสอบระยะห่างของวัตถุแต่ละชิ้นคุณสามารถทำให้การค้นหามีประสิทธิภาพมากขึ้นโดยใช้ควอดทรี