2013-03-10 7 views
7

फीका फीड मैं लीगडीएक्स में 2 डी शूटिंग गेम पर काम कर रहा हूं। मुझे यह उल्लेख करना होगा कि मैं LibGdx के लिए नया हूं, और मैं यह समझने में वास्तव में कड़ी मेहनत कर रहा हूं कि यह कैसे काम करता है। मुझे कुछ वर्षों तक जावा और एंड्रॉइड प्रोग्रामिंग में अनुभव है, इसलिए मैं गेम अवधारणाओं को समझता हूं।libgdx sprite

मुझे दिलचस्पी है कि स्प्राइट ऑब्जेक्ट को बाहर निकालने का कोई तरीका है।

मेरे पास स्क्रीन पर दुश्मन हैं, और जब दुश्मन मर चुका है तो मैं अपनी सूची से दुश्मन वस्तु को हटाना चाहता हूं और गणना और चौराहे तर्क के अंदर इसे अनदेखा करना चाहता हूं।

लेकिन मैं थोड़ा सा समय तक स्क्रीन पर दुश्मन के स्प्राइट रहना चाहता हूं और धीरे-धीरे फीका करना चाहता हूं।

वहाँ LibGdx में एक अच्छा तरीका यह संभाल करने के लिए ... है या मैं कुछ अतिरिक्त "बाहर फीका" फ्रेम आकर्षित करने के लिए है ... और एनीमेशन के अंदर इसे संभाल करने के लिए ...

वहाँ में एक साथ बनाया गया है सुविधा जो इस तरह की चीजों का समर्थन करती है?

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

+0

आप अपने स्प्राइट के लिए आंतरिक Stage2D उपयोग कर रहे हैं एनीमेशन कैसे लंबे समय के लिए जाना जाएगा? –

+0

नहीं, मैं अपने बनावट और sprites आकर्षित करने के लिए बैच का उपयोग कर रहा हूँ ... मैं स्क्रीन सामान पर चरण 2 डी का उपयोग करें, जैसे पॉज़ बटन, आदि।लेकिन सभी sprites और कण SpriteBatch के माध्यम से खींचे जाते हैं। – Veljko

+0

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

उत्तर

11

आप समय के साथ अपने "अल्फा" को कम करके अपने मृत दुश्मन sprites बाहर फीका करने में सक्षम होना चाहिए। मुझे लगता है कि ऐसा करने के लिए सबसे आसान तरीका है बैच setColor() उपयोग करने के लिए है:

batch.setColor(1.0f, 1.0f, 1.0f, fadeTimeAlpha); 
batch.draw(deadEnemySprite, ...); 

आप गणना करने के लिए होगा fadeTimeAlpha (समय के साथ 0.0f को 1.0f रूप से बनाता है)।
Color.lerp() methods मदद कर सकता है।

मुझे यकीन नहीं है कि प्रत्येक स्प्राइट के लिए रंग सेट करने से बैच फ्लश हो जाएगा (मुझे संदेह है कि यह होगा), इसलिए यह अपेक्षाकृत उच्च प्रदर्शन लागत हो सकती है (माना जाता है कि आपका बैच स्प्राइट ड्राइंग पहले से ही व्यवहार कर रहा था)।

+0

उत्तर के लिए टीएनएक्स! मैं भी कोशिश करूँगा। जब मैं बैच रंग बदलता हूं, तो क्या इसका मतलब यह है कि मैं उस बैच ऑब्जेक्ट के साथ जो कुछ भी खींचता हूं वह खत्म हो जाएगा? क्या मेरे पास गेम स्क्रीन में कई बैच उदाहरण हो सकते हैं? – Veljko

+0

@ वेल्जको शायद यह बहुत देर हो चुकी है, लेकिन हाँ, इसका मतलब है कि सब कुछ खत्म हो जाएगा। आपको ड्रॉ के बीच 'सेटकॉलर (1, 1, 1, 1)' के साथ इसे रीसेट करना होगा। – ashes999

+0

कोई समस्या नहीं है। मैंने इसे बहुत समय पहले हल किया था। वैसे भी टीएनएक्स। – Veljko

1

स्प्राइट का उपयोग करके आप .setAlpha उपयोग कर सकते हैं:

alpha += (1f/60f)/2; 
icon.setAlpha(alpha); 

पहले, अल्फा प्रणाली: आप ऊपर कोड स्निपेट में 0.0 और 1.0 (नहीं 0 और 255)

बीच की एक संख्या की आपूर्ति, alpha एक फ्लोट वैल्यू है और icon एक स्प्राइट है। इस मामले में अल्फा (प्रारंभ में) 0 है।

गणना के लिए

:

(1f/60f)/2; 

1f अधिकतम अल्फा

60F एफपीएस

और 2 है है, क्योंकि मैं इस पर 2 सेकंड जाना चाहते हैं।

(लीगडीएक्स के लिए नया, इसलिए मुझे पता नहीं चला कि मैं एफपीएस कैसे प्राप्त कर सकता हूं, क्योंकि यह आवश्यक नहीं है 60)।

बदलने क्या आप से विभाजित (और एफपीएस प्रासंगिक अगर बदलना), अल्फा से बदलता है कितना जोड़ा जाता है (या निकाला गया), और

से अधिक
+1

महान काम करता है! मतदान किया – ROSA