Ich habe versucht, das gleiche in einer wieder verwendbaren Weise zu erhalten .. ich fast eine Art und Weise unter Verwendung von getObjectsUnderPoint fand heraus() - dies gibt das Objekt unter ein particolar Punkt, z-geordnet (auch wenn sie nicht Geschwister sind, zB ViewStack, Popups, etc.).
Grundsätzlich bekomme ich das oberste Anzeigeobjekt unter einem bestimmten Punkt der Bühne und gehe dann nach oben zur Anzeigeobjekthierarchie, um das getestete Objekt zu finden. Wenn ich es finde, ist das Objekt sichtbar (nicht sichtbare Objekte in der Hierarchie sollten bereits durch den Aufruf getObjectsUnderPoint herausgefiltert werden).
Das Problem hier ist, dass Sie einen nicht transparenten Punkt Ihres Objekts verwenden müssen (in meinem Fall habe ich einen Offset von 5 Pixel wegen der runder Grenzen verwendet), sonst wird es von dieser Funktion nicht aufgenommen.
Irgendwelche Ideen, um es zu verbessern?
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;
}
Gibt es einen Grund bei Anwendung zu stoppen und nicht nur dann, wenn Eltern == null? –
Ich erinnere mich, dass die "Eltern" -Eigenschaft der Anwendung möglicherweise ein Zeiger auf dieselbe Instanz ist, die eine Endlosschleife verursachen würde. Ich bin mir nicht 100% sicher und kann das nicht leicht bestätigen, da ich seit ein paar Jahren keine Flex-Arbeit mehr mache. –