Скворец - получи сенсорное событие под другим

У меня 2 круга, у обоих есть сенсорные слушатели. Иногда один круг перекрывает другой на сцене, и я хочу вызвать обоих слушателей, но скворец запускает только круг впереди.

Как я могу сделать?

Мой код

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

2 ответа

Решение

Вместо двух отдельных слушателей используйте только одного слушателя для одного родительского объекта. И добавьте эти два круга в этот родительский объект. Чтобы определить, к какой цели дотронулись, используйте 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);
}

Может быть, обнаружение, если круги находятся в контакте. Попробуйте с этим:

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();
    }
}
Другие вопросы по тегам