LibGDX गेम बनाम एप्लीकेशन एडेप्टर


12

जब मैं एक नया LibGDX प्रोजेक्ट बनाता हूं तो कोर प्रोजेक्ट का मुख्य वर्ग ApplicationAdapter का विस्तार करता है । यहाँ है कि यह कैसा दिखता है।

package com.marimba.apptest;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;

public class AppMain extends ApplicationAdapter {   
    @Override
    public void create () {

    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    }
}

इसलिए मुझे एप्लिकेशन एडेप्टर को गेम में बदलना होगा यदि मैं स्क्रीन के बीच स्विच करने के लिए सेटस्क्रीन विधि को कॉल करना चाहता हूं। तो ApplicationAdapter का उपयोग क्या है ? मुझे इसका उपयोग कब करना चाहिए?

जवाबों:


7

जैसा कि @ user3068350 ने कहा, गेम और एप्लीकेशन एडेप्टर दोनों ही ApplicationListener को लागू करते हैं। यदि आप अपने गेम में स्क्रीन इंटरफ़ेस का उपयोग करने की योजना बना रहे हैं, तो गेम का विस्तार करना उपयोगी है, हालांकि कुछ डेवलपर्स एक अलग दृष्टिकोण लेने और स्क्रीन प्रबंधन को अपने तरीके से संभालने की इच्छा कर सकते हैं। अगर ऐसा है, तो ये ApplicationAdapter को बढ़ा देंगे।

व्यक्तिगत रूप से, मैं एक कस्टम अपडेट करने योग्य और / या ड्रा करने योग्य इंटरफ़ेस को लागू करने के लिए अपनी कक्षाओं को पसंद करता हूं, क्योंकि मैं अपनी रेंडर पद्धति को अपडेट और ड्रा में अलग करता हूं। इस मामले में, स्क्रीन का उपयोग उद्देश्य को हरा देगा क्योंकि इंटरफ़ेस में एक रेंडर विधि शामिल है।


1

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


1
लेकिन मुझे ApplicationAdapter का उपयोग कब करना चाहिए? और मैं यहां स्क्रीन का उपयोग कैसे करूंगा।
वाह मुरादीन

2
आपको ApplicationAdapter का उपयोग करने की आवश्यकता नहीं है। ApplicationAdapter और गेम दोनों ApplicationListener इंटरफ़ेस को लागू करते हैं। एक एडाप्टर क्लास सिर्फ एक वर्ग है जो एक इंटरफ़ेस के लिए कंकाल कार्यान्वयन प्रदान करता है ताकि आपको खाली पद्धति निकायों के साथ अपने कोड को अव्यवस्थित न करना पड़े। गेम के साथ स्क्रीन का उपयोग करने के लिए आप सेटस्क्रीन को कॉल करें और एक वर्ग में पास करें जो स्क्रीन इंटरफ़ेस को लागू करता है। आप अपनी स्क्रीन कक्षाओं को कंस्ट्रक्टर में गेम ऑब्जेक्ट ले सकते हैं ताकि आप स्क्रीन के भीतर स्क्रीन बदल सकें।
14:30 बजे user3068350

1
तो क्यों वे ApplicationAdapter बनाया है अगर यह कोई फायदा नहीं है?
वाही मुराद्यान

2
@VaheMuradyan, उपयोगकर्ता ने पहले ही उत्तर दिया कि: आपको अपने कोड को खाली विधि निकायों के साथ अव्यवस्थित करने की आवश्यकता नहीं है। जब आप ApplicationListenerसीधे लागू करते हैं, तो आपको उन सभी आवश्यक तरीकों को प्रदान करना होगा, जिनमें आप की आवश्यकता नहीं है (जैसे pause()या resume(), जिसका उपयोग हमेशा नहीं किया जाता है)। ApplicationAdapterआपकी सुविधा के लिए वहाँ है, इसलिए आपको खाली तरीकों को रखने की आवश्यकता नहीं है। यह एक साधारण उपयोगिता वर्ग है, यह कोई नई कार्यक्षमता नहीं जोड़ता है - यह सिर्फ आपके कोड क्लीनर (या कम ) को रखता है ।
JustACluelessNewbie

1

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

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

ApplicationAdapter कोई अतिरिक्त भूमि के ऊपर (यह एक ApplicationListener की एक सीधी कार्यान्वयन है) है। यह आपको और अधिक नियंत्रण प्रदान करता है क्योंकि आपको स्वयं सब कुछ करना पड़ता है। व्यक्तिगत रूप से, मैं ApplicationAdapters का उपयोग करना पसंद करता हूं।

TL; DR: उनके बीच कोई वास्तविक अंतर नहीं है। ApplicationAdapter आपको थोड़ा और नियंत्रण देता है और गेम थोड़ा कम काम करता है।

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