starałem się uzyskać to samo w wielokrotnego użytku sposób .. I prawie dowiedział sposób używając getObjectsUnderPoint() - ta zwraca obiekt pod punkt particolar, z-uporządkowany (nawet jeśli nie są rodzeństwem, np. ViewStack, Popups, ecc.).
Zasadniczo pobieram najwyższy obiekt wyświetlany pod konkretnym punktem stołu montażowego, a następnie w górę od hierarchii obiektów wyświetlanych, aby znaleźć przetestowany obiekt. Jeśli go znajdę, obiekt jest widoczny (niewidoczne obiekty w hierarchii powinny być już odfiltrowane przez wywołanie getObjectsUnderPoint).
Problem polega na tym, że musisz użyć nieprzezroczystego punktu obiektu (w moim przypadku użyłem przesunięcia o 5 pikseli ze względu na zaokrąglone krawędzie), w przeciwnym razie nie zostanie ono odebrane przez tę funkcję.
Wszelkie pomysły na ulepszenie?
Cosma
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;
}
Czy istnieje jakikolwiek powód, aby zatrzymać się na wniosku, a nie tylko wtedy, gdy rodzic == null? –
Przypominam sobie, że właściwość "rodzica" aplikacji może być wskaźnikiem powrotu do tej samej instancji, która spowodowałaby nieskończoną pętlę. Nie jestem w 100% pewny i nie mogę tego łatwo potwierdzić, ponieważ od kilku lat nie pracuję z Flex. –