2014-02-25 32 views
0

我有2个圆圈,两个都有触摸监听器。 有些时候,一个圆与另一个在舞台上重叠,我想触发两个听众,但starling只触发前面的圆圈。Starling - 在另一个触摸事件下获取

我该怎么办?

我的代码

circle1.addEventListener(TouchEvent.TOUCH, touched1) 
circle2.addEventListener(TouchEvent.TOUCH, touched2) 
function touched1(e:TouchEvent):void{ 
    trace("hi1") 
} 
function touched2(e:TouchEvent):void{ 
    trace("hi2") 
} 

回答

1

代替具有两个单独的听众,有一个父对象只有一个监听器。并在这个父对象中添加这两个圆圈。为了检测该目标被触摸然后,使用e.target.name像这样:

var parentClip:Sprite = new Sprite(); 
parentClip.x = 150; // x position 
parentClip.y = 150; // y position 
parentClip.name = "parentClip"; //This is not required in your case 

parentClip.addChild(circle1); 
parentClip.addChild(circle2); 

parentClip.addEventListener(TouchEvent.TOUCH, onTouched); 

function onTouched(e:TouchEvent):void 
{ 
    trace("circles parent is touched"); 
    trace("Hit: " + e.currentTarget.name); 
    trace("Hit: " + e.target.name); 
} 
+0

MouseEvent in Starling? – esdebon

+0

糟糕?抱歉。在回答问题时我忘记了八哥。感谢您指点。 –

1

也许检测所述圈处于接触。试试这个:

circle1.addEventListener(TouchEvent.TOUCH, touched1) 
circle2.addEventListener(TouchEvent.TOUCH, touched2) 

function touched1(e:TouchEvent=null):void 
{ 
    trace("hi1"); 

    if (circle1.getBounds(circle1.parent).intersects(circle2.getBounds(circle2.parent)) == true) 
    { 
     touched2(); 
    } 
} 

function touched2(e:TouchEvent=null):void 
{ 
    trace("hi2") 

    if (circle2.getBounds(circle2.parent).intersects(circle1.getBounds(circle1.parent)) == true) 
    { 
     touched1(); 
    } 
}