Скворец - получи сенсорное событие под другим
У меня 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();
}
}