1

请帮助我收到此错误,并且无法使用之前所有类似主题的帖子中描述的任何其他方法来解决。

实际上,我在这里将 swf myMap 加载到另一个 swf 上。swf 加载工作正常,但是当尝试从阶段删除它时,我得到上述错误...

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
    at flash.display::DisplayObjectContainer/removeChild()
    at actions.classes::MapInteractionManager/unloadSWF()
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()

这是我的as3代码...

 var _swfLoader:Loader;
    var _swfContent:MovieClip;

    loadSWF("myMap.swf");  //loading the swf file here

    function loadSWF(path:String):void {
       var _req:URLRequest = new URLRequest();
       _req.url = path;

       _swfLoader = new Loader();
       setupListeners(_swfLoader.contentLoaderInfo);

       _swfLoader.load(_req);
    }

    function setupListeners(dispatcher:IEventDispatcher):void {
       dispatcher.addEventListener(Event.COMPLETE, addSWF);
       dispatcher.addEventListener(ProgressEvent.PROGRESS, preloadSWF);
    }

    function preloadSWF(event:ProgressEvent):void {
       var _perc:int = (event.bytesLoaded / event.bytesTotal) * 100;
       // swfPreloader.percentTF.text = _perc + "%";
    }

    function addSWF(event:Event):void {
       event.target.removeEventListener(Event.COMPLETE, addSWF);
       event.target.removeEventListener(ProgressEvent.PROGRESS, preloadSWF);

       _swfContent = event.target.content;
       _swfContent.addEventListener("close", unloadSWF);

       main.stage.addChild(_swfContent);
    }

    function unloadSWF(event:Event):void {
       _swfLoader.unloadAndStop();

    main.stage.removeChild(_swfContent);  //getting error when trying to remove swf
       _swfContent = null;
    }


    and close event is as,
    _swfContent.dispatchEvent(new Event("close"));

请帮忙,我卡住了。

这里有一些更新,我将代码更新为,

function unloadSWF(event:Event):void
{
     if(main.stage.contains(_swfContent))
           main.stage.removeChild(_swfContent);
}

现在错误消失了,因为它没有进入 if 循环!!!???

但我仍然可以在舞台上看到 swf:( 请帮助

解决了...感谢大家的帮助...

ToddBFisher 确实解决了它:)

只需将 _swfLoader 添加到舞台,加载它,然后将关闭侦听器附加到它,而不是使用 _swfContent。去掉中间人,它起作用了......希望这有帮助......

4

3 回答 3

1

我记得.unloadAndStop();做了一堆清理类型的事情,你之前就打电话了。清理的一部分可能是将其从显示列表中删除。

removeChild()在调用之前尝试调用unlodaAndStop()

function unloadSWF(event:Event):void {
    stage.removeChild(_swfContent);  //getting error when trying to remove swf
    _swfLoader.unloadAndStop();
    _swfContent = null;
}

编辑

尝试简单地_swfLoader将. 剪掉中间人,看看会发生什么。close_swfContent

于 2013-01-17T06:09:33.067 回答
0

main.stage.removeChild已经设置 _swfContent为 null 因为removeChild被触发所以删除行 _swfContent = null可能会解决它。

于 2013-01-17T06:26:45.943 回答
0

该错误意味着孩子已经被删除(或从未添加)尝试注释掉

_swfLoader.unloadAndStop();

看看它是否有效。

于 2013-01-17T06:08:08.117 回答