क्या अंतर हैं विश्वासघात, TextureRegion, TextureAtlas, Sprite और Image में libgdx?


12

मैंने ट्यूटोरियल खोजे हैं। मैंने छवियों को लोड करने के लिए उपरोक्त कक्षाओं का उपयोग करने वाले लोगों को देखा है।

मेरी समझ के अनुसार, सभी कक्षाएं दो छवियों की एक गैर-शक्ति में पढ़ सकती हैं, TextureRegion / TextureAtlas का उपयोग आमतौर पर स्प्राइट शीट को लोड करने के लिए किया जाता है, जिसमें शीट में कई छवियां होती हैं। जबकि बनावट / स्प्राइट / छवि के लिए, उनका उपयोग एकल छवि के साथ एक स्प्राइट शीट को लोड करने के लिए किया जाता है।

हालाँकि, मुझे यह निश्चित नहीं है कि मुझे किस स्थिति में बनावट / स्प्राइट / छवि का उपयोग करना चाहिए और किस स्थिति में मुझे TextureRegion / TextureAtals का उपयोग करना चाहिए।

कृपया गलत होने पर मुझे सही करें, क्योंकि मैं विभिन्न ट्यूटोरियल देखने के बाद एपीआई में शब्दावली से थोड़ा भ्रमित हूं।

जवाबों:


18

सबसे पहले, TextureRegion बनाम TextureRegion: जब आप Texture t = new Texture (पाथ) जैसा कुछ करते हैं, तो आप GPU पर लोड कर रहे हैं। इसके अलावा, आपको 2 बनावट की शक्ति लोड करनी चाहिए। आप अन्य प्रस्तावों (Texture.setEnforcePotImages = false) के साथ काम कर सकते हैं, लेकिन इसे 2 के पाउ का उपयोग करने के लिए प्रोत्साहित किया जाता है।

अब, TextureRegion, एक Texture से "टुकड़ा" लेता है, कोई फर्क नहीं पड़ता कि यह आयाम है। एक बनावट और उस बनावट के कई TextureRegion होने का लाभ यह है कि आप हर क्षेत्र को GPU में लोड नहीं कर रहे हैं।

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


अब, आप सभी स्प्रिटशीट और छवियों के साथ TextureRegion और 2 संकल्प की शक्ति में एक एकल छवि का उपयोग करना चाहते हैं। क्या आपको सभी निर्देशांक और आयामों के साथ TextureRegions बनाना है? क्या आपको पिक्सल्स गिनने के लिए पेंट खोलने की जरूरत है? Noooo, तुम नहीं। आप TexturePacker जैसी किसी चीज़ का उपयोग कर सकते हैं । यह हर बनावट को एक चित्र में पैक करेगा और उन सभी के निर्देशांक और निर्देशांक के साथ एक .pack फ़ाइल बनाएगा।

TexturePacker

परिणाम कुछ इस तरह होगा:

पैक

एक बनावट बनाने के बजाय, एक TextureAtlas बनाएं, जैसे:

TextureAtlas बनाएँ

अब, आपके TextRegions को बनाना उतना ही सरल होगा:

findRegion

(ध्यान दें कि क्षेत्र का नाम विस्तार के बिना मूल छवि का नाम है)।


स्प्राइट बैच, का उपयोग कर 2 डी स्प्राइट ड्राइंग के लिए ज्यामिति, रंग और बनावट की जानकारी रखता है। इसका मतलब है, आप आसानी से उन्हें घुमा सकते हैं और स्थानांतरित कर सकते हैं। मैंने अपना स्वयं का इकाई वर्ग बनाया है, और मुझे स्प्राइट वर्ग की आवश्यकता नहीं है। आप शायद ऐसा ही करेंगे। मुझे यह वर्ग वास्तव में उपयोगी नहीं लगा।


छवि वर्ग अभिनेता से विरासत में मिला है। इसका मतलब है कि आप इसे एक मंच में जोड़ सकते हैं। यह Scene2D पैकेज का हिस्सा है। यदि आप libgdx के लिए नए हैं, और आप इस पैकेज के बारे में नहीं जानते हैं, तो यह इस वर्ग के बारे में आपके लिए पर्याप्त जानकारी है। यह वास्तव में एक दिलचस्प विषय है, लेकिन इस सवाल का जवाब नहीं है।

आशा है ये मदद करेगा :)


धन्यवाद! यह अब स्पष्ट है। :) फिर बनावट से TextureRegion बनाने और TextureAtlas से TextureRegion बनाने के प्रदर्शन के बारे में क्या?
user15783

4
@ user15783 एक नए प्रश्न के रूप में पूछें।
डेविड जे। लिस्ज़ेव्स्की

अच्छी जानकारी के बहुत सारे, लेकिन यह हिस्सा गलत / भ्रामक है: "आप हर क्षेत्र को GPU में लोड नहीं कर रहे हैं" वास्तव में, आप हर क्षेत्र को GPU में लोड कर रहे हैं। यह सिर्फ इतना है कि कई TextureRegionएस एक बनावट के अलग (या अतिव्यापी) भागों को Textureसंदर्भित कर सकते हैं , जबकि हमेशा पूरी छवि को संदर्भित करता है। चूंकि बनावट बदलना महंगा है, यह अच्छा है। आपका विवरण इसे TextureRegionविरल-बनावट (डी GL_ARB_sparse_texture) के साथ सौदों की तरह लगता है, लेकिन libGDX और इस पर चलने वाले अधिकांश हार्डवेयर उस विस्तार का समर्थन नहीं करते हैं।
bcrist

इसके अलावा, कृपया कोड के स्क्रीनशॉट पर एसई के मार्कडाउन कोड ब्लॉक को प्राथमिकता दें। इस तरह से चीजों को कॉपी और पेस्ट करना आसान है अगर लोग करना चाहते हैं। बस चार स्थानों के साथ कोड ब्लॉक की प्रत्येक पंक्ति शुरू करें। इनलाइन कोड स्पैन को गंभीर उच्चारण (बैकटिक) चरित्र के साथ आसपास के पाठ द्वारा बनाया जा सकता है: `
bcrist
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.