ฉันจะออกมาตรงๆและบอกว่าฉันไม่รู้ว่าจะแก้ปัญหาที่คุณอธิบายไว้ในคำถามได้อย่างไร (การตรวจจับการชนกันระหว่างรูปสี่เหลี่ยมมุมฉากแบบ iso) แต่ฉันสามารถบอกคุณได้ว่าคนอื่น ๆ แก้ปัญหาได้อย่างไรในอดีต :
วิธีการก็ทำในเกมอื่น ๆ คือการแยกโลกของเกมจากโลกหน้าจอ เมื่อคุณเริ่มต้นมันเป็นเรื่องธรรมดาที่จะจินตนาการว่าพวกเขาเป็นสิ่งเดียวกัน แต่ก็นำไปสู่ปัญหาเช่นปัญหาที่คุณกำลังอธิบาย
แนวคิดทั่วไปคือโลกของเกมถูกเก็บไว้ในหน่วยความจำอย่างสมบูรณ์เบื้องหลังมันเป็นเพียงตัวเลขการอ้างอิงและตรรกะ ความจริงที่ว่าคุณกำลังวาดโลกของเกมในภาพวาดสามมิตินั้นไม่เกี่ยวข้อง โลกของเกมของคุณไม่ควรมีแนวคิดของภาพสามมิติหรือสี่เหลี่ยมหรือแม้ว่าหน้าจอจะถูกวาดเป็น 3D ทั้งหมดนี้ได้รับการดูแลเมื่อคุณวาดโลกของเกมไปที่หน้าจอ (หรือที่รู้จักในโลกของหน้าจอ ) โลกของเกมควรได้รับการจัดเก็บและดูแลรักษาด้วยวิธีที่ง่ายที่สุดซึ่งเหมาะสำหรับเกมในเกมที่มีมิติเท่ากันโดยทั่วไปคุณจะไม่สนใจข้อเท็จจริงที่ว่า iso นั้นและเก็บตำแหน่งไว้ราวกับว่าคุณใช้ตารางที่จัดเรียงตามแนวแกน เกมส่วนใหญ่จะมีวิธีการแปลงพิกัดระหว่างสองโลกที่ฉันเรียกว่าฉันScreenToWorld(x, y)
และWorldToScreen(x, y)
. การแปลงมักจะทำกับคณิตศาสตร์เมทริกซ์ แต่สามารถทำได้ในวิธีอื่น คุณจะใช้ ScreenToWorld เมื่อคุณใช้เมาส์และ WorldToScreen เมื่อคุณวาด
มีข้อดีหลายประการที่จะแยกเป็นโลกของเกมและโลกหน้าจอ ข้อดีอย่างหนึ่งคือการตรวจจับการชนและการเคลื่อนไหวทั้งหมดเกิดขึ้นในโลกของเกมและมักจะตรงไปตรงมาเพราะคุณไม่ได้จัดการกับตารางที่เอียงหรือพิกัดเอียงหรือที่หน้าจออยู่ ฯลฯ ในกรณีของคุณ คุณจะต้องจัดการกับสี่เหลี่ยมและสี่เหลี่ยมจัตุรัสที่เรียงตามแนวแกน เมื่อโลกของเกมได้รับการปรับปรุงแล้วคุณจะวาดการเป็นตัวแทนของโลกของเกมไปที่หน้าจอคำหลัก: การเป็นตัวแทน ในตอนแรกมันอาจดูเหมือนเคาน์เตอร์ง่าย แต่หน้าจอของคุณเป็นเพียงการแสดงสิ่งที่เกิดขึ้นในโลกของเกม สิ่งนี้ทำให้สิ่งต่าง ๆ เช่นเซิร์ฟเวอร์เฉพาะและไคลเอนต์เหมือนเทอร์มินัลเป็นไปได้
FreeCivเป็นตัวอย่างที่ดีของสิ่งเหล่านี้ คุณสามารถดูโลกที่แน่นอนเช่นเดียวกับใด ๆ ของ: ตารางเหนือ / ใต้กริด, Isometric หรือแม้กระทั่ง Hex ทุกเกมที่คุณเรียกใช้มีเซิร์ฟเวอร์เฉพาะที่ทำงานในพื้นหลังแม้สำหรับเกมที่มีผู้เล่นคนเดียวดังนั้นลูกค้าจึงเป็นเพียงพอร์ตดิสเพลย์ไม่มีอะไรเพิ่มเติม
เรื่องสั้นที่มีความยาว: การแยกโลกของเกมและตรรกะออกจากหน้าจอทำให้ตรรกะของเกมง่ายขึ้นลดการแสดงผลเกม <-> การมีเพศสัมพันธ์และในทางกลับกันทำให้การตรวจจับการชนระหว่างแผ่น "iso" ง่ายต่อการจัดการ