एआई को स्थानांतरित करते समय गुरुत्वाकर्षण को कैसे ध्यान में रखना चाहिए


9

मैं एक 2D खेल बना रहा हूँ। वर्तमान में एक हेलीकॉप्टर उड़ान भर रहा है, जिसे खिलाड़ी द्वारा नियंत्रित किया जाता है। इसे तीर कुंजी का उपयोग करके नियंत्रित किया जाता है: UP, LEFT और RIGHT।

यह y अक्ष के साथ गति है dy, और x अक्ष के साथ गति है dx

यह भौतिकी इस प्रकार है:

जब भी यूपी को दबाया नहीं जाता है , dyनिरंतर तेजी से बढ़ता है, अनिश्चित काल तक नीचे की ओर। (गुरुत्वाकर्षण)। dxइसमें वर्तमान मूल्य रहता है।

जब यूपी को दबाया जाता है , तो dyजो भी वर्तमान में है, उसमें से निरंतर त्वरण में तेजी आती है, 4 तक (ऊपर की ओर, जब तक वह गति 4 तक नहीं पहुंच जाती)। dxइसमें वर्तमान मूल्य रहता है।

जब LEFT दबाया जाता है , तो dxनिरंतर त्वरण में तेजी लाता है, जो भी वर्तमान में है, -4 तक

जब राइट दबाया जाता है , तो dx निरंतर त्वरण में तेजी लाता है, जो भी वर्तमान में है, 4 तक

(जब LEFT या RIGHT को दबाया जाता है और UP को एक साथ दबाया नहीं जाता है, जैसा कि मैंने कहा: dyतेजी से छोटा और छोटा होता जाता है, क्योंकि गुरुत्वाकर्षण हेलीकाप्टर को प्रभावित कर रहा है)

यह सब हेलीकाप्टर को सीधी रेखाओं के बजाय हवा में अक्सर मेहराब का अनुसरण करता है।

यह भौतिकी बनाता है जो काफी यथार्थवादी लगता है।

मेरा सवाल यह है कि:

प्रतिद्वंद्वी हेलिकॉप्टर, एआई, को उसी भौतिकी प्रणाली का उपयोग करके स्थानांतरित करना चाहिए।

चलो कहते हैं कि एआई जहां से वर्तमान में है, बी को इंगित करना चाहता है।

यहाँ छवि विवरण दर्ज करें

यदि खेल में कोई गुरुत्वाकर्षण और कोई क्रमिक त्वरण नहीं था, तो यह आसान होगा। मैं बस ए की स्थिति से बिंदु बी तक एक वेक्टर आकर्षित करूंगा, और एआई इसका पालन करूंगा।

लेकिन चूंकि वहाँ गुरुत्वाकर्षण और क्रमिक त्वरण, ऐ एक सीधी रेखा में ले जाने के लिए कभी नहीं कर सकते हैं (लगभग)। यथासंभव समय-कुशलता से बिंदु B पर AI जाने के लिए सबसे अच्छा तरीका क्या होगा?

किसी विशिष्ट गंतव्य की ओर AI को ले जाने पर मैं गुरुत्वाकर्षण को कैसे ध्यान में रख सकता हूं?

(यदि यह स्पष्ट करना आसान है, तो कृपया बिंदु B को AI के समान y- अक्ष पर समान स्तर पर मानें, और इसे विकर्ण में नहीं।)

धन्यवाद


क्या आप AI पर भौतिकी को निष्क्रिय कर सकते हैं, जबकि यह गतिमान है? यदि ऐसा है, तो आप इसे तब तक निष्क्रिय कर सकते हैं जब यह बिंदु की ओर बढ़ रहा हो, और जब यह पहुंच जाए तब इसे सक्षम करें
जफुर

@ ज़फ़र यह एआई के आंदोलन को अवास्तविक लगता है, या कम से कम अंतर से लगता है कि खिलाड़ी का आंदोलन कैसा लगता है। मैं एआई के आंदोलन को खिलाड़ी के आंदोलन के समान देखना चाहता हूं।
user3150201

जवाबों:


4

tl; डॉ:

TimeToStop.x = CurrentSpeed.x / Accelaration.x;

if (TimeToStop.x * CurrentSpeed.x >= 1.99 * DistanceFromTarget.x)
    slow_down_x(); // CurrentSpeed += Acc.x * direction;
else
    speed_up_towards_target_x(); // CurrentSpeed += Acc.x * direction;

उसी के साथ। बाउंड स्पीड को याद रखें इसलिए यह शून्य और अधिकतम गति के बीच है। यदि किसी बिंदु पर दुश्मन की गति बहुत धीमी है और वह रुकने की कोशिश कर रहा है, तो वह विपरीत दिशा में चलना शुरू कर सकता है। इसकी अनुमति न दें। यदि यह धीमा हो रहा है तो इसे रोकें और इसकी गति 1 * Acc के नीचे है।

लंबा संस्करण: यदि कोई बाधा नहीं है, तो x- अक्ष पर y- अक्ष पर आंदोलन पूरी तरह से अप्रासंगिक है (और प्रभावित नहीं करता है)। तो आपके द्वारा वर्णित प्रश्न को दो अलग-अलग प्रश्नों में तोड़ा जा सकता है।

  1. एक्स-एक्सिस पर वहां चल रहा है
  2. और वहाँ पर y- अक्ष।

CS.xऔर CS.yपर x और y axises हमारे वर्तमान गति कर रहे हैं।

TS.xऔर TS.yक्या यह समय आपको प्रासंगिक अक्ष में अपनी वर्तमान गति को देखते हुए केवल लंबवत या क्षैतिज रूप से रोक देगा।

D.xऔर D.yप्रत्येक अक्ष पर दूरी हैं।

tl; dr: आप एक्स-धुरी पर (यदि संभव हो तो [[जब तक संभव हो] गति बढ़ाते रहें) जब तक कि आप उस स्थान तक नहीं पहुँच जाते जहाँ निम्नलिखित स्थिति सत्य है:

if (TS.x * CS.x >= 1.99 * D.x) hit_the_breaks_on_x();

Y के साथ भी ऐसा ही है।


2

इसी तरह की समस्या के लिए मैंने जो एक दृष्टिकोण का उपयोग किया है, वह पहले एक वेक्टर को लक्ष्य तक खींचना था, फिर वर्तमान वेग दिशा की तुलना करना।

तो, वेग वेक्टर और लक्ष्य वेक्टर के बीच हस्ताक्षरित कोण लें और वेक्टर के आकार के सापेक्ष एक जोर लगाएं।

तो अगर कोण एक लाल वेग सदिश और हरी लक्ष्य वेक्टर के बीच नकारात्मक है तो सकारात्मक जोर लागू होते हैं, अन्यथा कोई जोर लागू करते हैं और गुरुत्वाकर्षण तरह यह बाहर निकलने दिया।यहाँ छवि विवरण दर्ज करें

ध्यान दें कि आपको उन चार चतुर्भुजों का इलाज करना होगा जहाँ लक्ष्य अलग हो सकता है (जैसे कि यदि ऊपरी बाएँ कोने में लक्ष्य एक सकारात्मक कोण होता तो जोर लगाने की आवश्यकता होती)।

इसके अलावा, लक्ष्य वेग से विचलन के सापेक्ष जोर की मात्रा को लागू करना सुनिश्चित करें।

तकनीकी रूप से यह ध्यान में नहीं ले रहा है, यह वर्तमान स्थिति के लिए क्षतिपूर्ति कर रहा है और इसका मतलब है कि AI हेलीकॉप्टर लक्ष्य के लिए एक सीधी रेखा में नहीं उड़ सकता है, लेकिन थोड़ा लड़खड़ा जाएगा। यह आपके खेल के लिए काम कर भी सकता है और नहीं भी।


1
धन्यवाद। इस बारे में कई सवाल: 1- "... वेक्टर के आकार के सापेक्ष एक जोर लगाओ " । क्या आपका मतलब था, " कोण का आकार " ? 2- 'हस्ताक्षरित कोण' से, आपका मतलब सकारात्मक या नकारात्मक - सही है? यदि ऐसा है, तो एक कोण की तुलना में सकारात्मक है अगर यह भूरे रंग की रेखा से ऊपर है, और नकारात्मक अगर यह भूरे रंग की रेखा के नीचे है। सही? 3- अगर मैं सही तरीके से समझूं, तो आपका क्या मतलब है: हर फ्रेम, वर्तमान वेग वेक्टर और लक्ष्य के लिए वर्तमान वेक्टर के बीच का कोण प्राप्त करें। फिर dx से जोड़ें / घटाएं और तदनुसार डाई करें। क्या ये सही है?
user3150201

@ user3150201 कोण प्रश्न पर हाँ। हां हस्ताक्षरित / अहस्ताक्षरित प्रश्न पर, atan2 आपको दो वैक्टर के बीच हस्ताक्षरित कोण दे सकता है। ऐसा लगता है कि आपने मेरी बात को समझ लिया है, अगर मैं अस्पष्ट था तो माफी माँगता हूँ।
जन्म

1

आप बस आंदोलन को प्रत्येक एक्स फ्रेम पुनर्गणना कर सकते हैं। यह मानते हुए कि आप बहुत से फ़्रेमों को बीच में नहीं रखते हैं, लेकिन इतना पर्याप्त है कि यह प्रदर्शन को प्रभावित नहीं करता है, हेलीकाप्टर पर गुरुत्वाकर्षण वास्तव में प्रक्षेपवक्र को बदलते देखने के लिए पर्याप्त मजबूत नहीं होना चाहिए। इसके अलावा, मुझे लगता है कि एक खिलाड़ी संभवतः उसी तरह से आगे बढ़ सकता है, जो चलते समय गुरुत्वाकर्षण के लिए अनुकूल हो और इसकी योजना न हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.