2013-07-10 8 views
5

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

दुर्भाग्य से, इस तरह से ऐसा करने पर, मुझे छवियों को स्क्रीन के बाहर शुरू करने देना है, और दृश्य में जाना है, और मैं बाईं ओर स्क्रीन के बाहर पूरी तरह से बाहर होने से पहले उन्हें फिर से नहीं हटा सकता। इसके परिणामस्वरूप छवियों को स्क्रीन की सीमाओं के बाहर आंशिक रूप से दिखाई दे रहा है।

नियंत्रण Group के रूप में बनाया गया है जिसमें दो स्थिर छवियां (एक काला पृष्ठभूमि और स्क्रीन की छवि अग्रभूमि के रूप में), साथ ही साथ सभी चलती छवियां भी हैं। यह Group को मेरे Stage (अन्य सभी कलाकारों की तरह) में जोड़ा गया है, और Stage के हिस्से के रूप में खींचा गया है।

नीचे दी गई छवि में, नियंत्रण की सीमाएं लाल रंग के साथ चिह्नित की जाती हैं। मैं चलती छवियों के हिस्सों को छिपाना चाहता हूं जो इन सीमाओं के बाहर हैं। क्या मुझे कुछ libGDX कार्यक्षमता का उपयोग करना संभव है? किसी भी तरह से समूह के ड्राइंग क्षेत्र को बाधित कर सकते हैं, शायद?

An illustration of how the screen works.

मेरे अन्य विकल्प, स्क्रीन के सामने नीले रंग की पृष्ठभूमि के कुछ हिस्सों आकर्षित बाहरी कारकों के कारण को छिपाने के लिए, या स्क्रीन के किनारों काफी मोटी उन्हें छिपाने के लिए बनाने के लिए कर रहे हैं। मुझे लगता है कि ये दोनों समाधान अनावश्यक रूप से असुविधाजनक हैं, और मुझे पूरा यकीन है कि ऐसा करने का एक बेहतर तरीका है।

कोई सुझाव?

उत्तर

11

समाधान ScissorStack का उपयोग करना था।

@Override 
public void draw(SpriteBatch batch, float parentAlpha) { 

    //Create a scissor recangle that covers my Actor. 
    Rectangle scissors = new Rectangle(); 
    Rectangle clipBounds = new Rectangle(getX(),getY(),getWidth(),getHeight()); 
    ScissorStack.calculateScissors(camera, batch.getTransformMatrix(), clipBounds, scissors); 
    batch.flush(); //Make sure nothing is clipped before we want it to. 
    ScissorStack.pushScissors(scissors); 

    //Draw the actor as usual 
    super.draw(batch, parentAlpha); 

    //Perform the actual clipping 
    ScissorStack.popScissors(); 
} 
+0

मेरे लिए यह केवल तब काम करता था जब मैंने "बैच.फ्लश();" ड्रॉ कॉल के बाद। हालांकि मैं "super.draw (...)" –

+0

बैच.फ्लश() के बजाय "batch.draw (...)" के साथ खुद को आकर्षित करता हूं; super.draw (बैच, पैरेंट अल्फा) के बाद होना चाहिए; –

संबंधित मुद्दे