Я пытался получить то же самое многоразовым способом. Я почти нашел способ с помощью getObjectsUnderPoint () - это возвращает объект в определенной точке, в z-порядке (даже если они не являются братьями и сестрами, например ViewStack, Всплывающие окна, ecc.).
По сути, я включаю самый верхний экранный объект под определенной точкой этапа, затем поднимаюсь по иерархии экранных объектов, чтобы найти тестируемый объект. Если я нахожу его, объект видимый (невидимые объекты в иерархии уже должны быть отфильтрованы вызовом getObjectsUnderPoint).
Проблема здесь в том, что вы должны использовать непрозрачную точку вашего объекта (в моем случае я использовал смещение в 5 пикселей из-за границ округлости), иначе она не будет подхвачена этой функцией.
Есть идеи, как его улучшить?
Косма
public static function isVisible(object:DisplayObject):Boolean {
var point:Point = object.localToGlobal(new Point(5, 5));
var objects:Array = object.stage.getObjectsUnderPoint(point);
if (objects.length > 0) {
if (isDescendantOf(object, objects[objects.length - 1] as DisplayObject)) {
return true;
}
}
return false;
}
public static function isDescendantOf(parent:DisplayObject, child:DisplayObject):Boolean {
while (child.parent != null) {
if (child.parent === parent) {
return true;
} else {
child = child.parent;
}
}
return false;
}