如何禁用精灵及其子女?

时间:2013-08-17 19:55:39

标签: actionscript-3 flash sprite visibility

显然visible = false;不会影响孩子的可见属性,除非他们实际上不可见。我可以使用什么技术来禁用父精灵及其子女及其子女的孩子等?

  • 禁用精灵所有其子女
  • 启用一个精灵所有其子女
  • 将其从舞台
  • 中删除
  • 父母和子女被禁用阻止他们的活动

P.s。:似乎ActionScript 3中缺少此功能。

2 个答案:

答案 0 :(得分:0)

我认为你误解了可见财产的目的。


据Adobe称,Visible确定:

  

显示对象是否可见。禁用显示不可见的对象。例如,如果InteractiveObject实例的visible = false,则无法单击它。

这并不意味着它会阻止其他事件处理程序(如Event.ENTER_FRAME)触发。如果依靠visible禁用元素,则必须在从该显示对象触发事件之前验证此值实际上是true


  

这不起作用,虽然父精灵不可见,但未绘制子项,此属性的值仍然为真。

     

...

     

如果儿童被禁用,我无法轻易检查:if(visible)

如果要将父DisplayObject的可见性设置为false并期望它传播到其所有子项,那么您就错了。只有父级的可见性标志将保持为false。您应该通过检查其父项来验证子项的可见性:

if(parent.visible) {
    //perform logic here...
}

答案 1 :(得分:0)

要获得所有孩子的孩子,您可以使用:

function getAllChildChilds(source : DisplayObjectContainer) : Array {
var returnArr:Array = [];
getAllChildChildsIntern(source, returnArr, new int(), new int());
return returnArr;

function getAllChildChildsIntern(container : DisplayObjectContainer, childArr : Array, i : int, j : int) : void {
    j = container.numChildren;
    for (i = 0; i < j; i++) {
        var child : * = container.getChildAt(i);
        if (child is DisplayObjectContainer) {
            var mc : DisplayObjectContainer= child;
            childArr.push(mc);
            getAllChildChildsIntern(mc, childArr, new int(), new int());
        }
    }
}}

用法: getAllChildChilds(MC); //返回一个包含mc所有子节点和子节点子节点的数组。 (mc本身不在数组中)

安德烈亚斯回答了其他一切。