অবসরপ্রাপ্ত মিসাইল বা লেজার গুলি চালানোর সময় শত্রুটিকে লক্ষ্য করতে সহায়তা করার জন্য আপনারা ডিসেেন্ট ফ্রাইস্পেসের কথা মনে রেখেছিলেন তাদের পক্ষে এটি একটি দুর্দান্ত বৈশিষ্ট্য ছিল: এটি যে জাহাজটি আপনাকে ধাওয়া করেছিল তা সামনে চালানো আঘাতের জন্য কোথায় গুলি করতে হবে তা বলতে গিয়ে জাহাজের সামনে একটি ক্রোশার দেখিয়েছিল। লক্ষ্য।
আমি উত্তরটি /programming/4107403/ai-algorithm-to-shoot-at-a-target-in-a-2d-game?lq=1 থেকে ব্যবহার করার চেষ্টা করেছি তবে এটি 2D এর জন্য তাই আমি চেষ্টা করেছি এটি অভিযোজিত।
আমি প্রথমে XoZ বিমানের জন্য ছেদ স্থানটি সমাধান করার জন্য গণনাটি দ্রবীভূত করে x এবং z স্থানাঙ্কগুলি সংরক্ষণ করে এবং তারপরে XoY বিমানের জন্য ছেদ স্থানটি সমাধান করে এবং y স্থানাঙ্ককে একটি চূড়ান্ত xyz যুক্ত করেছিলাম যা আমি ক্লিপস্পেসে রূপান্তরিত করেছি এবং সেগুলিতে একটি টেক্সচার রেখেছি স্থানাঙ্ক। তবে অবশ্যই এটি যেমনটি করা উচিত তেমন কাজ করে না অন্যথায় আমি প্রশ্ন পোস্ট করতাম না।
এক্সওজেড প্লেনে 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);
প্রথমবারের টার্গেটভেলোসিটি.ই আসলে টার্গেটভেলোসিটি.জেড (টার্গেটপোসের জন্য একই) এবং দ্বিতীয়বার এটি আসলে টার্গেটভেলোসিটি.ই।
এক্সওজেডের পরে চূড়ান্ত অবস্থান
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 () বর্গক্ষেত্র নয় বিকাশ - একটি বিভ্রান্তি এড়ানো।