Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何禁用sprite及其子项?_Actionscript 3_Flash_Sprite_Visibility - Fatal编程技术网

Actionscript 3 如何禁用sprite及其子项?

Actionscript 3 如何禁用sprite及其子项?,actionscript-3,flash,sprite,visibility,Actionscript 3,Flash,Sprite,Visibility,显然visible=false不会影响子对象的可见属性,除非它们实际上不可见。我可以使用什么技术来禁用父精灵及其子精灵及其子精灵的子精灵等 禁用具有所有子项的精灵 启用具有所有子项的精灵 不将其从舞台上移除 禁用父项和子项时,阻止其事件 注意:ActionScript 3中似乎缺少此功能。我认为您误解了visible属性的用途 根据Adobe,Visible决定: 显示对象是否可见。不可见的显示对象将被禁用。例如,如果InteractiveObject实例的visible=false,则无

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

  • 禁用具有所有子项的精灵
  • 启用具有所有子项的精灵
  • 将其从舞台上移除
  • 禁用父项和子项时,阻止其事件

注意:ActionScript 3中似乎缺少此功能。

我认为您误解了visible属性的用途


根据Adobe,Visible决定:

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

这并不意味着它将阻止其他事件处理程序(如
event.ENTER_FRAME
)触发。如果您依赖于
可见
来禁用元素,则在从该显示对象触发事件之前,还必须验证该值实际上是


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

我无法轻松检查儿童是否残疾:if(可见)

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

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

要获取所有儿童的儿童,可以使用以下命令:

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());
        }
    }
}}
函数GetAllChilds(源代码:DisplayObjectContainer):数组{ var returnArr:Array=[]; getAllChildsInTern(source,returnArr,new int(),new int()); 返回arr; 函数getAllChildsInTern(容器:DisplayObjectContainer,childArr:Array,i:int,j:int):void{ j=container.numChildren; 对于(i=0;i
用法: GetAllChilds(mc)//返回包含mc的所有子级和子级的子级的数组。(mc本身不在阵列中)


其他问题都由安德烈亚斯回答。

孩子们的孩子们呢?我有一棵很大的雪碧树。我只在非常罕见的重大事件上设置可见性,并且几乎在每一帧上都进行检查。如果我还必须检查父类的存在,那么去“<代码> >(父对象、父对象、父对象、父对象、可见对象)< /代码>不是我想去的方式。也许您应该考虑删除那个实例中那个特定对象的侦听器。你可以随心所欲地把它变得简单或复杂。底线是visible flag可能不会削减它,您很可能需要一个自定义类(带有启用和禁用的方法)来扩展您正在使用的显示对象。而没有人给出完整的答案?