2013-05-24 5 views
5

के अंदर रिक्त स्थान के लिए ईवेंट स्पर्श करें मेरे पास एक स्टार्लिंग Sprite है जिसे मैं स्पर्श ईवेंट प्राप्त करना चाहता हूं। मैंएक स्टार्लिंग स्प्राइट

content.addEventListener(TouchEvent.TOUCH, onTouch); 

function onTouch(e:TouchEvent) { 

    var touch:Touch = e.getTouch(content) as Touch; 
    if (touch) { 
     //do something 
    } 
} 

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

मैं मंच पर स्पर्श सुनने और hitTestPoint() के बराबर करने के बारे में भी सोच रहा था।

मैं

var hitTest = (touch && content.hitTest(this.globalToLocal(new Point(touch.globalX, touch.globalY)))); 

के साथ आया था लेकिन यह, या तो काम करने के लिए स्पर्श घटना केवल काम कर रहा है जब सामग्री स्प्राइट का एक बच्चा छुआ है प्रतीत नहीं होता।

समाधान:

अंत मैं एक alpha'd क्वाड इस्तेमाल किया के रूप में Cherniv

द्वारा
bg = new Quad(width, height); 
bg.alpha = 0; 
addChildAt(bg, 0); 
+0

क्या आपने 'isTouching()': http://doc.starling-framework.org/core/starling/events/Touch.html#isTouching() का प्रयास किया था? – Cherniv

उत्तर

3

अपने Sprite में हल्के पारदर्शी Quad (कोई एक Image की जरुरत) का उपयोग करने की कोशिश का सुझाव दिया।

+0

मैं अंत में इसके साथ चला गया। यदि कोई भी बेहतर समाधान पोस्ट नहीं करता है तो मैं आपका जवाब स्वीकार करूंगा। चीयर्स – Tom

+0

@ टॉम इस 'स्पर्श' व्यवहार में कुछ प्रकार का तर्क है, लेकिन यह दुख की बात है कि आपके पास कोई वैकल्पिक व्यवहार नहीं है जैसा आपने नोट किया है। मैंने 'आईट टचिंग' की कोशिश की है - यह – Cherniv

+0

में मदद नहीं कर रहा है यह दृष्टिकोण है कि स्टारलिंग के निर्माता डैनियल स्परल आमतौर पर स्टार्लिंग मंचों में लोगों की सिफारिश करते हैं। देशी डिस्प्ले सूची पर, कई लोगों का उपयोग सामान्य रूप से 'अदृश्य fill' के साथ 'graphics.drawRect() 'है, इसलिए स्टार्लिंग दृष्टिकोण मोटे तौर पर वही है। स्टार्लिंग में एक विकल्प है: उप-वर्ग में 'हिटटेस्ट() 'ओवरराइड करें और अपना खुद का कस्टम व्यवहार प्रदान करें। – joshtynjala

0

मुझे आशा है कि यह आपके लिए उपयोगी होगा।

content.addEventListener(TouchEvent.TOUCH, onTouch); 

    function onTouch(e:TouchEvent) { 

     var touch:Touch = e.getTouch(stage) as Touch; 
     if(touch && touch.phase == TouchPhase.BEGAN){ 
      //do something 
     } 
    } 

    or 
    addEventListener(TouchEvent.TOUCH, onTouch); 

    function onTouch(e:TouchEvent) { 
     var touch:Touch = e.getTouch(sprite(eve.target)) as Touch; 
     if(touch && touch.phase == TouchPhase.BEGAN){ 
      //do something 
     } 
    } 
संबंधित मुद्दे