【问题标题】:as3 check if child exists - removeChild();as3 检查孩子是否存在 - removeChild();
【发布时间】:2013-05-09 15:55:25
【问题描述】:

下面的代码创建了一个名为“circle”的影片剪辑,并检查它是否存在并通过 removeChild() 将其删除;它删除了圆圈,但 [object MovieClip] 仍然存在。

如何使用 removeChild 检查孩子是“在舞台上”还是被移除?

import flash.display.MovieClip;
import flash.events.MouseEvent;

var circle:MovieClip  = new MovieClip();
circle.graphics.beginFill(0xFF794B);
circle.graphics.drawCircle(50, 50, 30);
circle.graphics.endFill();
addChild(circle);
circle.addEventListener(MouseEvent.CLICK, test);

function test(event:MouseEvent)
{
    trace(circle);
    if(circle)
    {
     trace("Called if Circle");
     removeChild(circle);
    }
    trace(circle);
}

【问题讨论】:

标签: actionscript-3 exists removechild addchild


【解决方案1】:

检查circle.stage 属性:

    if(circle.stage)
    {
        trace("circle is in display list");
        circle.parent.removeChild(circle);  //remove circle from display list
        circle = null //remove reference to the circle, mark it for garbage collection
    }
    else
    {
        trace("circle isn't in display list");
    }

【讨论】:

  • 我刚刚使用了 removeChild(circle);这应该适用于我的目的,但为什么 trace(circle) 窗台消失后会显示?有没有办法删除它? - 我也收到此错误:TypeError:错误#1009:无法访问空对象引用的属性或方法。
  • 您只需从显示列表中删除 circle,要删除对它的引用,您应该手动设置 circle = null,之后垃圾收集器将删除从记忆中圈出。
  • 或者更好的是,使用parent 代替舞台。这样,即使它的父母之一不在舞台上,它仍然会被移除。
  • 检查stageparent略有不同,如果需要检查child是否处于stage或不检查stage ,如果你只需要从父级中移除child,不管舞台上是否有子级,只勾选parent
【解决方案2】:

您可能想要使用 DisplayObject 的 contains 函数。

if (contains(circle))
{
    // The circle is contained by the current clip
    removeChild( circle );
    // Remove the reference to the clip 
    // (optional, if you don't want to use the circle again)
    circle = null; 
}

【讨论】:

    猜你喜欢
    • 2017-10-24
    • 2016-09-18
    • 2011-11-25
    • 2016-09-20
    • 2010-12-06
    • 1970-01-01
    • 2017-02-25
    • 2017-04-27
    • 1970-01-01
    相关资源
    最近更新 更多