В верхней части моей головы вы можете использовать метод getObjectsUnderPoint.Любой типизированный экранный объект имеет этот метод.Метод принимает аргумент типа Point, где вы можете передать координаты мыши.Я полагаю, что метод возвращает массив объектов ниже этой точки, которые содержатся в DisplayObject, для которого вы вызвали метод getObjectsUnderPoint.Например, если ваши видеоклипы вложены в родительский клип с именем Container, вы можете сделать что-то вроде этого:
var pt:Point = new Point(10, 20);
var objects:Array = container.getObjectsUnderPoint(pt);
Тогда для вашего конкретного сценария я бы отсортировал возвращаемые объекты по глубине, чтобы получитьследующий в списке (тот, что ниже или любой другой, который я хочу).
var i:int = 0;
var topContainer:DisplayObject;
var lastIndex:int = 0;
for(i; i < objects.length; ++i){
if(topContainer:DisplayObject){
if(container.getChildIndex(DisplayObject(objects[i])) < lastIndex){
lastIndex = container.getChildIndex(DisplayObject(objects[i]));
}
}else{
topContainer = DisplayObject(objects[i]);
lastIndex = container.getChildIndex(DisplayObject(objects[i]));
}
}
Итак, в основном я делаю здесь сортировку по всем результатам и выбираю тот, у которого самый низкий дочерний индекс, дов идеале получить следующий ребенок ближе к поверхности.Прошло много времени с тех пор, как я увлекся флэш-памятью, поэтому я не уверен на 100%, работает ли список отображения таким образом с точки зрения дочернего индекса, то есть, если у более близких объектов значение индекса ниже или выше.Другими словами, весьма вероятно, что дочерний элемент с индексом, если 0, может быть дочерним элементом в нижней части списка.Вам придется попробовать и просто настроить приведенный выше код, если это так.В любом случае, как только эта функция запустится (кстати, она не проверена, так что, может быть, это типа и тому подобное, но концепция должна работать), тогда у вас будет клип, к которому вы действительно хотите обратиться, на который ссылается topContainer.Отсюда вы можете отправить mouseEvent в этот контейнер.
topContainer.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN, false, false, MOUSE_POSITION_X, MOUSE_POSITION_Y));
Теперь это то, что вы будете делать, если внутри topContainer есть слушатель, ожидающий получения своего собственного события мыши.То есть имеется прослушиватель событий, непосредственно подключенный к объекту topContainer, например:
topContainer.addEventListener(MouseEvent.MOUSE_DOWN, onMouse);
или внутри класса topContainer:
this.addEventListener(MouseEvent.MOUSE_DOWN, onMouse);
Причина в том, что мы отправляемсобытие непосредственно на ссылку topContainer без цели события и с отключенным всплывающим событием.
Если, с другой стороны, ваша модель использует один обработчик MouseEvent на уровне этапа или каком-либо другом уровне, а ваш обработчик onMouse имеетоператор switch для выполнения определенных действий в зависимости от цели события, например:
function onMouse(e:MouseEvent):void
{
switch(e.currentTarget){
case MyMovieClip1:
//Do Something
break;
case MyMovieClip2:
//Do Something
break;
}
}
Затем вам нужно будет отправить это событие в несколько ином поместье.Вам нужно будет включить ссылку на объект topContainer, а также включить всплывающее окно события:
someRelativeClip.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN, true, false, MOUSE_POSITION_X, MOUSE_POSITION_Y, topContainer));
Надеюсь, что это поможет, дайте мне знать, если вам нужны какие-либо разъяснения.