खोज…


संस्करण

संस्करण रिलीज़ की तारीख
1.9.3 2016/05/16
1.9.5 2016/12/11

स्थापना या सेटअप

LibGDX में एक साधारण जावा प्रोग्राम की मदद से काफी सरल सेटअप है। आप यहाँ डाउनलोड पा सकते हैं। जब आप एप्लिकेशन को स्टार्टअप करते हैं, तो यह कुछ इस तरह दिखाई देगा: LibGDX प्रोजेक्ट जनरेटर का उदाहरण
नोट: यह स्क्रीनशॉट लिनक्स पर लिया गया है और यह पथ दिखाता है जो विंडोज इंस्टॉलेशन से अलग है। हालाँकि, प्रपत्र इस सेटअप अनुप्रयोग के साथ संगत किसी भी OS पर समान है

इनपुट बॉक्स

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


उप परियोजनाएं

उप परियोजनाएं केवल ऐसे प्लेटफॉर्म हैं जिन्हें तैनात किया जाना है। यह हिस्सा बहुत आत्म व्याख्यात्मक है। यदि आप उदाहरण के लिए इसे HTML पर लागू नहीं करना चाहते हैं, तो बस चेक बॉक्स को अनचेक करें।


एक्सटेंशन

एक्सटेंशन आधिकारिक LibGDX एक्सटेंशन हैं। यहाँ एक तालिका है जो आपको बता रही है कि प्रत्येक क्या है:

एक्सटेंशन नाम विवरण
गोली बुलेट एक 3D Collision Detection और Rigid Body Dynamics लाइब्रेरी है।
freetype Freetype आपको बिटमैप फ़ॉन्ट का उपयोग करने के बजाय .ttf फ़ॉन्ट का उपयोग करने की अनुमति देता है
उपकरण आपको LibGDX टूल के आउटपुट को लागू करने की अनुमति देता है।
नियंत्रकों आपको XBox 360 नियंत्रकों जैसे नियंत्रकों को लागू करने की अनुमति देता है।
box2d 2 डी गेम के लिए एक भौतिकी पुस्तकालय।
Box2dlights एक भौतिकी खेल में नरम गतिशील रोशनी जोड़ने का आसान तरीका देता है।
एशले एक छोटी इकाई रूपरेखा
एक कृत्रिम खुफिया ढांचा।

आप थर्ड पार्टी एक्सटेंशन जोड़ सकते हैं, लेकिन उनका विवरण या नाम यहां नहीं दिखाया जाएगा।


उन्नत

एडवांस्ड सेक्शन में आप कई सेटिंग्स सेट कर सकते हैं और एक्लिप्स और आईडिया आईडीई के लिए अतिरिक्त प्रोजेक्ट फाइल्स जेनरेट कर सकते हैं।

नाम सेट करना विवरण
मावेन मिरर यूआरएल प्रदान की गई मावेन यूआरएल के साथ मावेन सेंट्रल की जगह
विचार Intellij IDEA प्रोजेक्ट फ़ाइल बनाता है
ग्रहण ग्रहण परियोजना फ़ाइलों को उत्पन्न करता है
ऑफ़लाइन मोड डाउनलोड निर्भरता को बल न दें

पीढ़ी

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

LibGDX हैलो वर्ल्ड

मूल बातें

उत्पन्न परियोजनाओं में पहले से लागू एक बुनियादी हैलो वर्ल्ड जैसा एप्लिकेशन शामिल है।

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

उदाहरण

core प्रोजेक्ट में com.mygdx.game.MyGdxGame.java खोलें। आप निम्न कोड देखेंगे:

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    
    @Override
    public void create () {
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
    }
    
    @Override
    public void dispose () {
        batch.dispose();
        img.dispose();
    }
} 

यद्यपि यह आपकी मुख्य परियोजना है, आप इसे सीधे निष्पादित नहीं करेंगे, आपको हमेशा प्लेटफ़ॉर्म-विशिष्ट लॉन्चर को चलाना होगा, डेस्कटॉप के लिए इसे desktop प्रोजेक्ट में com.mygdx.game.desktop.DesktopLauncher.java कहा जाता है।

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new MyGdxGame(), config);
    }
} 

इस वर्ग में आप प्लेटफ़ॉर्म-विशिष्ट सेटिंग्स सेट कर सकते हैं।


अपना खेल चला रहे हैं

अपनी परियोजना को चलाने के लिए ग्रहण और इंटेलीज दो अलग-अलग तरीकों का उपयोग करते हैं। नीचे अपनी आईडीई का पता लगाएं।

एक्लिप्स का उपयोग करके चल रहा है

ग्रहण का उपयोग करके, आप इस एप्लिकेशन को जावा एप्लिकेशन के रूप में चलाकर अपना एप्लिकेशन चला सकते हैं (प्रोजेक्ट पर राइट-क्लिक करें -> इस रूप में चलाएं -> जावा एप्लिकेशन)। आप निम्न विंडो देखेंगे:

डेस्कटॉप पर नमस्ते दुनिया चल रही है

Intellij Idea का उपयोग करके रनिंग

इंटेलीज में, आपको एक रन कॉन्फ़िगरेशन बनाने की आवश्यकता होगी। ऐसा करने के लिए, आपको ऊपरी दाएं बटन पर क्लिक करना होगा जो नीचे की ओर गाजर की तरह दिखता है:

गाजर

फिर "एडिट कॉन्फिगरेशन ..." बटन पर क्लिक करें। आपको अपने सभी चालू रन कॉन्फ़िगरेशन की स्क्रीन के साथ प्रस्तुत किया जाएगा। उस विंडो के ऊपरी बाएँ भाग में "+" पर क्लिक करें, और "एप्लिकेशन" विकल्प चुनें। वहां से, "मुख्य वर्ग" विकल्प के लिए "डेस्कटॉपलॉन्चर" फ़ाइल का चयन करें, "कोर के क्लास क्लास का उपयोग करें" को मुख्य विकल्प पर सेट करें, और अपने मुख्य फ़ोल्डर में संपत्ति फ़ोल्डर में "कार्यशील निर्देशिका" सेट करें। अंतिम उत्पाद कुछ इस तरह दिखना चाहिए:

कॉन्फ़िगरेशन उदाहरण चलाएँ

एक बार जब आप ऐसा कर लेते हैं, तो आप अपने रन कॉन्फ़िगरेशन के लिए एक नाम का चयन कर सकते हैं, और "लागू करें" पर क्लिक करें, फिर "ठीक है"। एक बार आपके साथ ऐसा करने के बाद, आप शीर्ष दाईं ओर हरे रंग के रन आइकन पर क्लिक कर सकते हैं:

आइकन चलाएं

MyGdxGame वर्ग में क्या हो रहा है?

पहले create विधि को कहा जाता है, जो स्क्रीन पर आने वाले बैच को इनिशियलाइज़ करेगा। तब विधि badlogic.jpg को मेमोरी में लोड करती है।

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

(यह जानना अच्छा है कि डिस्पोज़ करना रनटाइम के साथ-साथ अन्य प्लेटफार्मों जैसे एंड्रॉइड पर भी हो सकता है, क्योंकि एंड्रॉइड मेमोरी स्पेस खाली कर सकता है जब एप्लिकेशन पृष्ठभूमि में होते हैं, लेकिन यह अधिक उन्नत विषय है)



टिप्पणी: यदि आपको नीचे की तरह चलने में कोई त्रुटि मिलती है तो उत्तर के लिए इस प्रश्न की जांच करें!

फ़ाइल नहीं मिली: badlogic.jpg (आंतरिक)

LibGDX सामान्य अवलोकन

LibGDX जावा में विकसित एक मुक्त, ओपन-सोर्स गेम-डेवलपमेंट लाइब्रेरी है। यह लक्ष्य उपयोगकर्ताओं को डेस्कटॉप, Android, iOS और वेब ब्राउज़र पर चलने वाले क्रॉस-प्लेटफ़ॉर्म गेम को विकसित करने की अनुमति देना है। एक बार कोड लिखें, इसे किसी भी प्रमुख प्लेटफ़ॉर्म पर तैनात करें।

प्लेटफ़ॉर्म-विशिष्ट कोड के लिए समर्थन जोड़ना

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

आप कोर मॉड्यूल में इस तरह का कोड नहीं जोड़ सकते। इसलिए पहला कदम इंटरफ़ेस बनाना है। इसे कोर मॉड्यूल में बनाएँ। यह पहला इंटरफेस अन्य इंटरफेस को प्रबंधित करने के लिए एक उपयोगिता है:

public interface PlatformWrapper{
    //here you can also add other things you need that are platform specific.
    //If you want to create your own file saver for an instance, a JSON based database,
    //achievements, leaderboards, in app purchases and anything else you need platform specific code for.
    SQLWrapper getSQLSaver();//This one will be used in this example
    AchievementWrapper getAchievementHandler();//this line is here as an example
}

फिर, हमें एक दूसरा इंटरफ़ेस, SQLWrapper बनाने की आवश्यकता है। यह एक कोर मॉड्यूल में भी जाता है।

public interface SQLWrapper{
    void init(String DATABASE);
    void saveSerializable(int id, Object o);
    Object loadSerializable(int id, Object o);
    void saveString(int id, String s);
    //.... and other methods you need here. This is something that varies
    //with usage. You may not need the serializable methods, but really need a custom method for saving 
    //an entire game world. This part is entirely up to you to find what methods you need
   
    //With these three methods, always assume it is the active database in question. Unless 
    //otherwise specified, it most likely is
    String getActiveDatabase();
    void deleteDatabase();
    void deleteTable(String table);//delete the active table
}

अब, आपको प्रत्येक प्रोजेक्ट में जाने और PlatformWrapper को लागू करने के लिए एक वर्ग बनाने और SQLWrapper को लागू करने की आवश्यकता है। प्रत्येक प्रोजेक्ट में आप आवश्यक कोड जोड़ते हैं, जैसे इंस्टेंस, कंस्ट्रक्टर और इतने पर।

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

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

संपत्ति प्रबंधक

AssetManager एक ऐसा वर्ग है जो आपकी संपत्ति का प्रबंधन करने में आपकी मदद करता है।

सबसे पहले, आपको एक उदाहरण बनाने की आवश्यकता है:

AssetManager am = new AssetManager();

इसके बाद इसे आरंभ किया जाता है, और इससे पहले कि आप कुछ भी प्रस्तुत करें, आप संसाधन प्राप्त करना चाहते हैं:

am.load("badlogic.jpg", Texture.class);//Texture.class is the class this asset is of. If it is a 
//sound asset, it doesn't go under Texture. if it is a 3D model, it doesn't go under Texture.class
//Which class added depends on the asset you load

//... other loading here ...//

//when finished, call finishLoading:
am.finishLoading();

अब, जहाँ भी आप ऐसा महसूस कर रहे हैं badlogic.jpg :

Texture texture = am.get("badlogic.jpg");
//Ready to render! The rendering itself is in the normal way

AssetManager का उपयोग करने से आप उन्हें एक बार AssetManager की याद में लोड कर सकते हैं, और फिर उन्हें जितनी बार चाहें उतनी बार प्राप्त कर सकते हैं।

AssetManager का उपयोग क्यों करें? ( विकि से ):

AssetManager (कोड) आपको अपनी संपत्ति को लोड करने और प्रबंधित करने में मदद करता है। निम्नलिखित अच्छे व्यवहार के कारण, अपनी संपत्ति को लोड करने का अनुशंसित तरीका है:

  • अधिकांश संसाधनों का लोड असिंक्रोनस रूप से किया जाता है, इसलिए आप चीजों को लोड करते समय एक प्रतिक्रियाशील लोडिंग स्क्रीन प्रदर्शित कर सकते हैं
  • एसेट्स को रेफरेंस काउंट किया जाता है। यदि दो परिसंपत्तियाँ A और B दोनों किसी अन्य परिसंपत्ति C पर निर्भर करती हैं, तो C को तब तक निपटाया नहीं जाएगा, जब तक A और B को निपटा नहीं दिया जाता। इसका मतलब यह भी है कि यदि आप किसी संपत्ति को कई बार लोड करते हैं, तो यह वास्तव में साझा किया जाएगा और केवल एक बार मेमोरी लेगा!
  • आपकी सभी संपत्तियों को संग्रहीत करने के लिए एक एकल स्थान।
  • कैश जैसी चीजों को पारदर्शी रूप से लागू करने की अनुमति देता है (नीचे देखें FileHandleResolver)

2 डी दृश्य ग्राफ

जब आप जावा या एंड्रॉइड के साथ आरंभ करते हैं, तो आप जल्दी से सीखते हैं कि (0,0) शीर्ष-बाएं कोने में है। LibGDX में, हालांकि, (0,0) नीचे बाएं कोने में डिफ़ॉल्ट रूप से है।

ऑर्थोग्राफ़िक कैमरे का उपयोग करके, आप (0, 0) शीर्ष-बाएँ कोने में हो सकते हैं। हालांकि डिफ़ॉल्ट रूप से, (0, 0) नीचे-बाएँ कोने में है। यह कुछ ऐसा है जो जानना महत्वपूर्ण है, क्योंकि यह भी बदलता है कि बनावट के किस कोने में X और Y निर्देशांक हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow