रेसिंग खेलों में तबाही को रोकें


9

एंड्रॉइड पर GTA III खेलते समय मैंने कुछ ऐसा देखा है जो मुझे लगभग हर रेसिंग गेम में परेशान कर रहा है जो मैंने खेला है (शायद मारियो कार्ट को छोड़कर): सीधे आगे ड्राइविंग आसान है, लेकिन वक्र वास्तव में कठिन हैं। जब मैं लेन को स्विच करता हूं या किसी को पास करता हूं, तो कार आगे-पीछे घूमने लगती है, और इसे सही करने का कोई भी प्रयास इसे और खराब बनाता है। केवल एक चीज मैं ब्रेक मार सकता हूं। मुझे लगता है कि यह किसी प्रकार की अति है।

इससे जो चिढ़ होती है वह यह है कि वास्तविक जीवन में यह मेरे लिए कभी नहीं होता है (भगवान :-) धन्यवाद), इसलिए वाहनों के साथ 90% खेल मेरे अंदर से अवास्तविक लगता है (भले ही वास्तव में अच्छे भौतिकी इंजन होने के बावजूद)। मैंने इस बारे में कुछ लोगों से बात की है, और ऐसा लगता है कि आप या तो 'रेसिंग गेम' प्राप्त कर रहे हैं, या आप नहीं। बहुत अभ्यास के साथ, मैंने बहुत सावधानी से, बहुत ब्रेक लगाकर (और आमतौर पर मेरी उंगलियों में ऐंठन होने पर) कुछ गेम्स (जैसे स्पीड सीरीज की आवश्यकता से) में अर्ध-अच्छा पाने का प्रबंधन किया।

आप एक गेम डेवलपर के रूप में क्या कर सकते हैं ताकि अधिक से अधिक अनुनाद तबाही को रोका जा सके, और ड्राइविंग को सही महसूस किया जा सके? (एक आकस्मिक रेसिंग गेम के लिए, जो 100% यथार्थवादी भौतिकी के लिए प्रयास नहीं करता है)

मुझे यह भी आश्चर्य है कि सुपर मारियो कार्ट जैसे खेल वास्तव में अलग-अलग तरीके से क्या करते हैं ताकि उनके पास इतना अधिक कष्ट न हो?

मुझे लगता है कि एक समस्या यह है कि यदि आप कीबोर्ड या टचस्क्रीन (लेकिन पहियों और पैडल नहीं) के साथ खेलते हैं, तो आपके पास केवल डिजिटल इनपुट है: गैस दबाया गया है या नहीं, स्टीयरिंग बाएं / दाएं है या नहीं, और यह उचित रूप से एक स्टेयरर के लिए बहुत कठिन है गति दी। दूसरी बात यह है कि आपके पास वास्तव में गति की अच्छी समझ नहीं है, और वास्तविकता में आप (सुरक्षित) की तुलना में बहुत तेजी से ड्राइव करेंगे। मेरे सिर के ऊपर से, एक समाधान गति के साथ स्टीयरिंग प्रतिक्रिया को भिन्न करने के लिए हो सकता है।


3
आपको यह भी विचार करना होगा कि आपका लक्षित दर्शक कौन है। यदि यह उत्साही ड्राइविंग गेमर्स है, तो आप केवल उन्हें 'फिक्सिंग' वास्तविकता से अलग कर देंगे। आप शायद कारों की दौड़ नहीं करते हैं, और यह नहीं समझते हैं कि एक दौड़ की उच्च गति पर जो समस्या आप अनुभव कर रहे हैं वह एक बहुत ही वास्तविक चीज है जो वास्तविक दौड़ ड्राइवरों के लिए एक समस्या है। असली 'फिक्स' अधिक आकस्मिक होना है, और यही मारियो कार्ट अलग कर रहा है। वे भौतिकी के साथ शिथिल हैं और फिशिंग बनाने के लिए आवश्यक बलों को मॉडल नहीं करते हैं, और इस तरह कट्टर ड्राइविंग गेम के प्रशंसकों के लिए रुचि नहीं है।
DampeS8N 18

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

जवाबों:


7

एक समाधान यह होगा कि आप थोड़ा धोखा खाएं और अनुमान लगाएं कि खिलाड़ी क्या करना चाहता है। जब खिलाड़ी एक सीधे खंड पर होता है और बाईं ओर दबाता है, तो आप मान सकते हैं कि वह गलियों को बदलना चाहता है। जब वह एक वक्र या चौराहे के करीब होता है, तो वह निश्चित रूप से मुड़ना चाहता है। खिलाड़ी एक वक्र में सटीक स्टीयरिंग कोण को नियंत्रित करने में असमर्थ है, इसलिए आप खिलाड़ी को संदेह का लाभ देने का निर्णय ले सकते हैं और हमेशा उसे सही कोण पर मोड़ बटन दबाते समय आदर्श कोण में वक्रों के माध्यम से ड्राइव करने दें जैसा कि शारीरिक रूप से संभव है - कोई भी खिलाड़ी जो 200 किमी / घंटा के साथ एक हेयरपिन वक्र के माध्यम से ड्राइव करने की कोशिश करता है, वह घास के ऊपर एक छोटी उड़ान से दंडित होने का हकदार है)।

यह, निश्चित रूप से, मुश्किल हो सकता है जब खिलाड़ी वास्तव में एक सीधे अनुभाग को चालू करना चाहता है या वास्तव में एक चौराहे से पहले गलियों को स्विच करना चाहता है।

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

संपादित करें: एक टचस्क्रीन पर, आप स्टीयरिंग और गति को नियंत्रित करने के लिए बटन के बजाय स्लाइडर्स का उपयोग कर सकते हैं। जब स्क्रीन दबाव के प्रति संवेदनशील होती है, तो आप दबाव की व्याख्या भी कर सकते हैं (लेकिन अधिकतम दबाव पर दृश्य प्रतिक्रिया दें, या अत्यधिक खिलाड़ी अपने प्रदर्शन को तोड़ सकते हैं)। जब डिवाइस में ओरिएंटेशन सेंसर होते हैं, तो आप स्टीयरिंग को नियंत्रित करने के लिए डिवाइस झुकाव का उपयोग कर सकते हैं।


आपके सुधार के लिए धन्यवाद, @kotekzot लेकिन आप उनसे पूछे बिना ही सीधे अन्य लोगों के पोस्ट को संपादन का सुझाव दे सकते हैं।
फिलीपिंस

आपका विचार अच्छा है। जब दायां बटन दबाया जाता है (0/1), तो यह कार को ऐसे कोण से घुमाएगा जो वक्र पर निर्भर करता है। जब आप ड्राइव करते हैं, तो जैसे: आप कहते हैं कि 'मैं बाएं मुड़ता हूं' (0/1) लेकिन वास्तव में आप ढलान के आधार पर स्टीयरिंग व्हील को कम या ज्यादा मोड़ेंगे। और यह भी ध्यान देने योग्य बात है: कोण धीरे-धीरे बदलता है, अचानक नहीं।
गेमअल्केमिस्ट

0

ग्रैंड थेफ्ट ऑटो IV और V के अलावा और कौन से खेलों को लागू किया गया है, इस पर शोध करते हुए मैं इस (पुराने) सवाल पर आया था, लेकिन मेरे पास नियंत्रणीय ओवरस्टेयर हासिल करने के लिए एक अच्छा जवाब है। मुझे केवल ग्रैंड थेफ्ट ऑटो वी में ड्राइविंग मॉडल के साथ खिलवाड़ करने का कुछ अनुभव है, लेकिन यह जानकारी कुछ हद तक यथार्थवादी ड्राइविंग मॉडल पर लागू होनी चाहिए।

अधिकांश ड्राइविंग गेम्स में क्या होता है, यह है कि कार स्टीयरिंग आउटपुट सीधे खिलाड़ी इनपुट से जुड़ा हुआ है - भले ही कुछ (लौकिक) चौरसाई का उपयोग किया जाता है। यह एक सुस्त भावना या एक झटकेदार भावना का कारण बनता है - और कार को नियंत्रण से जाने देने के बाद खुद को सही नहीं करता है। यह एक वास्तविक कार के विपरीत है, जहां कार पहिया पर बल जारी करने के बाद खुद को केंद्रित करती है। कुछ खेल अपने हैंडलिंग मॉडल को बदलकर या आर्केड हैंडलिंग मॉडल होने से इसे ठीक करने का प्रयास करते हैं।

ग्रैंड थेफ्ट ऑटो वी में क्या देखा जा सकता है, यह है कि उपयोगकर्ता स्टीयरिंग इनपुट सीधे स्टीयरिंग आउटपुट से जुड़ा नहीं है। वाहन अपने वर्तमान वेग सदिश की ओर स्वयं ही आगे बढ़ता है। यह दिखाई देता है जब एक मामूली ओवरस्टेयर स्थिति को मजबूर करना और स्टीयरिंग पहियों का निरीक्षण करना - बिना किसी इनपुट के, वे खुद से काउंटरस्टेयर करते हैं। किसी भी उपयोगकर्ता इनपुट को इन "प्राकृतिक" सुधारों के ऊपर जोड़ा जाता है।

हालांकि, इस दृष्टिकोण के लिए एक नकारात्मक पक्ष यह है कि कार बहुत चिपचिपा और कुछ हद तक एक पॉवरस्लाइड या बहाव में जाने के लिए जिद्दी है - इसलिए यह काउंटरस्टियर मान कुछ कोण तक सीमित हो सकता है।

इस सिद्धांत को स्टीयरिंग प्रणाली को फिर से लागू करने और मूल व्यवहार के साथ तुलना करके सत्यापित किया जा सकता है।

  • इनपुट को सीधे आउटपुट में लिंक करते समय, गति-आधारित स्टीयरिंग इनपुट सीमक लगाने पर भी वाहन को नियंत्रित करना वास्तव में अत्यंत कठिन होता है।
  • प्राकृतिक प्रतिरूप में जोड़ते समय, व्यवहार लगभग गेम के कार्यान्वयन के समान है, लेकिन कारें "स्थिर" हैं।
  • जब 15 डिग्री सीमा में काउंटरस्टेयर में जोड़ते हैं, तो व्यवहार लगभग समान होता है।

ध्यान रखने वाली बात यह है कि ग्रैंड थेफ्ट ऑटो वी को यहां "आदर्श" के रूप में लिया गया था - हालांकि मुझे अभी तक इस प्रणाली को लागू करने वाले किसी भी अन्य खेल को ढूंढना नहीं है।

यदि आप कुछ कोड के लिए उत्सुक हैं, तो यहां मेरे कार्यान्वयन का एक टुकड़ा है।

// Returns in radians
float Racer_calculateDesiredHeading(float steeringMax, float desiredHeading,
    float reduction) {
    desiredHeading *= reduction;
    float correction = desiredHeading;

    // Get the relative velocity vector
    Vector3 speedVector = ENTITY::GET_ENTITY_SPEED_VECTOR(vehicle, true);
    if (abs(speedVector.y) > 3.0f) {
        // Simplify it to an angle
        Vector3 target = Normalize(speedVector);
        float travelDir = atan2(target.y, target.x) - static_cast<float>(M_PI) / 2.0f;
        if (travelDir > static_cast<float>(M_PI) / 2.0f) {
            travelDir -= static_cast<float>(M_PI);
        }
        if (travelDir < -static_cast<float>(M_PI) / 2.0f) {
            travelDir += static_cast<float>(M_PI);
        }
        // Correct for reverse
        travelDir *= sgn(speedVector.y);

        // Limit to some degree, R* uses 15 degrees
        travelDir = std::clamp(travelDir, deg2rad(-15.0f), deg2rad(15.0f));

        // User input deviation
        correction = travelDir + desiredHeading;
    }

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