आप में से जिन लोगों को डीसेंट फ्रीस्पैस याद है, उनके लिए दुश्मन को निशाना बनाने में मदद करने के लिए एक अच्छी सुविधा थी जब गैर-होमिंग मिसाइलों या लेज़रों की शूटिंग करना: यह जहाज के सामने एक क्रॉसहेयर दिखाया गया था जो आपको पीछा करते हुए बताता था कि चलती हिट करने के लिए कहाँ शूट करना है लक्ष्य।
मैंने /programming/4107403/ai-algorithm-to-shoot-at-a-target-in-a-2d-game?lq=1 से उत्तर का उपयोग करने की कोशिश की, लेकिन यह 2 डी के लिए है इसलिए मैंने कोशिश की इसे स्वीकार करना।
मैंने पहले XZZ विमान के लिए चौराहे के बिंदु को हल करने के लिए गणना को विघटित किया और x और z निर्देशांक को बचाया और फिर XoY विमान के लिए प्रतिच्छेदन बिंदु को हल करने और y को अंतिम xyz में जोड़ते हुए कहा कि मैंने तब क्लिपस्पेस में बदल दिया और उन पर एक बनावट डाल दी। निर्देशांक। लेकिन निश्चित रूप से यह काम नहीं करता है क्योंकि यह होना चाहिए या मैं सवाल पोस्ट नहीं होता।
XoZ प्लेन में X ढूंढने के बाद और XoY में 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 विमानों को अलग करने और किसी भी अच्छे की गणना करने का है? या 3 डी के लिए एक अलग दृष्टिकोण है?
- sqr () वर्ग है sqrt नहीं - एक भ्रम से बचने।