สำหรับผู้ที่จำ Descent Freespace มันมีคุณสมบัติที่ดีที่จะช่วยให้คุณเล็งไปที่ศัตรูเมื่อยิงขีปนาวุธหรือเลเซอร์ที่ไม่ใช่ homing: มันแสดงเล็งด้านหน้าของเรือรบที่คุณไล่ล่าบอกว่าจะยิงเพื่อเคลื่อนที่ เป้า
ฉันลองใช้คำตอบจาก/programming/4107403/ai-algorithm-to-shoot-at-a-target-in-a-target-in-a-2d-game?lq=1แต่มันเป็นแบบ 2D ดังนั้นฉันจึงลอง ปรับตัว
ฉันแยกย่อยการคำนวณเพื่อแก้จุดตัดสำหรับระนาบ XoZ และบันทึกพิกัด x และ z แล้วแก้จุดตัดสำหรับระนาบ XoY และเพิ่มพิกัด y ไปยัง xyz สุดท้ายที่ฉันเปลี่ยนเป็นพื้นผิวแล้ว พิกัด. แต่แน่นอนว่ามันใช้งานไม่ได้อย่างที่ควรหรืออย่างอื่นฉันจะไม่โพสต์คำถาม
จากสิ่งที่ฉันสังเกตเห็นหลังจากพบ x ในระนาบ XoZ และใน XoY the x ไม่เหมือนกันดังนั้นบางสิ่งต้องผิด
float a = ENG_Math.sqr(targetVelocity.x) + ENG_Math.sqr(targetVelocity.y) -
ENG_Math.sqr(projectileSpeed);
float b = 2.0f * (targetVelocity.x * targetPos.x +
targetVelocity.y * targetPos.y);
float c = ENG_Math.sqr(targetPos.x) + ENG_Math.sqr(targetPos.y);
ENG_Math.solveQuadraticEquation(a, b, c, collisionTime);
ครั้งแรกที่ targetVelocity.y เป็น targetVelocity.z (เหมือนกันสำหรับ targetPos) และครั้งที่สองก็เป็น targetVelocity.y
ตำแหน่งสุดท้ายหลังจาก XoZ คือ
crossPosition.set(minTime * finalEntityVelocity.x + finalTargetPos4D.x, 0.0f,
minTime * finalEntityVelocity.z + finalTargetPos4D.z);
และหลังจาก XoY
crossPosition.y = minTime * finalEntityVelocity.y + finalTargetPos4D.y;
วิธีการของฉันในการแยกออกเป็น 2 ระนาบและคำนวณความดีใด ๆ หรือสำหรับ 3D มีวิธีการที่แตกต่างกันโดยสิ้นเชิง?
- sqr () เป็นตารางไม่ใช่ sqrt - หลีกเลี่ยงความสับสน