java - overriding drawing order scene2D's stage -
आपको एक जटिल Scene2D
आलेख libgdx
के साथ कई < कोड> समूह का और अभिनेता का
। आप चाहते हैं कि उपयोगकर्ता कुछ अभिनेता
का चयन करें और अंत में उनको आकर्षित करें ताकि वे किसी भी अन्य अभिनेता
के शीर्ष पर ध्यान केंद्रित कर सकें
मैं दोबारा स्टेज
पर दोबारा करना चाहूंगा पहली बार यह चयन न किए गए अभिनेता
को खींचता है, दूसरी बार यह चयनित कलाकारों
को खींचता है। मैं इस व्यवहार को लागू करने के लिए कोई 'अच्छा' तरीका नहीं देखता हूं।
मैं उन विकल्पों को पसंद करूँगा जो साफ हैं I
क्या काम नहीं करता है:
-
अभिनेता
toFront
() विधि केवल उसके भाइयों के लिए काम करती है - स्टेज में
अभिनेता
के स्थान गमागमन: यह परिवर्तनों कोअभिनेता
है।
परिदृश्य को संशोधित करता है के बारे में सोचें: आपके पास एक समूह जीए और समूह जीबी के साथ एक रूट
है समूह
जीए में दो छवियां हैं iA1 और iA2 । समूह
जीबी में एक छवि iB है। यह देखते हुए कि समूह
जीए पहले मंच पर जोड़ा गया है और उस छवि iA1 iB के साथ ओवरलैप करता है; अब आप iA1 का चयन करना चाहते हैं और इसे iB पर प्रकट करना चाहते हैं। मैं केवल gA.toFront () को कॉल नहीं करना चाहता हूं; इससे पूरे ग्रुप
जीए को मोर्चे पर रखा जाएगा, जिसका अर्थ भी iA2 को फ्रंट में रखा गया है iA2 को सामने में समूह
जीबी
दो समाधान हैं -
1 - [एकाधिक] समूहों का उपयोग करना बंद करें बेकार है लेकिन यह आसान विकल्प हो सकता है यदि आप देखते हैं कि कैसे रेंडरिंग / आरेखण किया गया है, तो आप स्टेज के लिए मूल समूह से शुरू करते हैं और अपने बच्चों को प्राप्त करते हैं और उन्हें प्रस्तुत करते हैं उन बच्चों में से प्रत्येक के लिए, यदि वे एक समूह हैं तो समूह के बच्चों को प्रस्तुत करना ZIndex किसी समूह के भीतर बच्चों के आदेश से ज्यादा कुछ नहीं है। यदि आप अभिनेता के setZIndex
को देखते हैं तो आप देख सकते हैं कि क्यों toFront
या setZIndex
केवल भाई बहन को प्रभावित करता है।
सार्वजनिक शून्य सेटजइंडएक्स (इंट इंडेक्स) {यदि (इंडेक्स लेफ्टिनेंट; 0) नया अवैध बेबुनियाद अपवाद फेंकें ("ज़ीन्डएक्स नहीं हो सकता; 0।"); समूह मूल = this.parent; यदि (माता पिता == रिक्त) वापसी; सरणी के & lt; अभिनेता & gt; बच्चों = parent.get बच्चे (); यदि (children.size == 1) वापसी; अगर (! बच्चों .removeValue (यह, सच)) वापसी; यदि (इंडेक्स & gt; = children.size) children.add (this); अन्य बच्चों। इन्टरेट (इंडेक्स, यह); }
2 - एकमात्र अन्य विकल्प सभी अभिनेताओं के आरेखण क्रम को बदलना होगा। आपको स्टेज
का विस्तार करना होगा और अपने चयन के भिन्न क्रम के आधार पर ड्रा
विधि को ड्रा
में बदलना होगा। आपको शायद Group.drawChildren
विधि से बहुत अधिक कार्यक्षमता को शामिल करना होगा।
TLDR; जिस तरीके से LibGDX में कार्यान्वित किया जाता है - एक समूह एक परत है यदि आप परतों नहीं चाहते हैं, तो या तो समूह बदलते हैं या समूह का उपयोग करना बंद कर देते हैं।
Comments
Post a Comment