2013-05-25 2 views
7

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

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

myGroup.addListener(new InputListener() { 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
      Actor targetActor = event.getTarget(); 
      // is the touched pixel transparent: return false 
      // else: use targetActor to handle the event and return true 
     }; 
    }); 

क्या यह करने का सही तरीका है? मैंने सोचा कि विधि टचडाउन के लिए झूठी वापसी करना घटना के लिए प्रचार जारी रखेगा और मुझे उसी स्थिति में अन्य अभिनेताओं के लिए टचडाउन कार्यक्रम भी प्राप्त करने देगा। लेकिन इस एक गलतफहमी हो रहा है ...

अद्यतन

P.T.s जवाब सही घटना हो रही है की समस्या का हल। अब मुझे यह पता लगाने में समस्या मिली है कि हिट पिक्सेल पारदर्शी है या नहीं। ऐसा लगता है कि मुझे पहुंच प्राप्त करने के लिए छवि को पिक्समैप के रूप में चाहिए। लेकिन मुझे नहीं पता कि एक छवि को पिक्समैप में कैसे परिवर्तित किया जाए। मुझे यह भी आश्चर्य है कि यह प्रदर्शन और स्मृति उपयोग के संदर्भ में एक अच्छा समाधान है ..

+0

आप छवि से पिक्समैप तक नहीं जाते हैं। आप पिक्समैप से बनावट तक चित्रकारी में छवि तक जाते हैं। – NateS

+0

क्या आपने जो समाधान प्रदान किया है, क्या आपने कोशिश की? – ManishSB

उत्तर

5

मुझे लगता है कि आप Actor.hit() विधि को ओवरराइड करना चाहते हैं। scene2d Hit Detection wiki देखें।

ऐसा करने के लिए, Image उपclass, और वहां hit विशेषज्ञता डालें। कुछ की तरह:

public Actor hit(float x, float y, boolean touchable) { 
    Actor result = super.hit(x, y, touchable); 
    if (result != null) { // x,y is within bounding box of this Actor 
    // Test if actor is really hit (do nothing) or it was missed (set result = null) 
    } 
    return result; 
} 

मेरा मानना ​​है कि आप touchDown श्रोता के भीतर इसे पूरा नहीं कर सकते क्योंकि मंच अभिनेता "के पीछे" इस एक को छोड़ दिया गया होगा (केवल "जनक" अभिनेताओं अगर आप यहाँ अवास्तविक लौटाते टचडाउन घटना मिल जाएगा) ।

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