Actionscript 3 - 在我的 swf 中加载另一个 swf 时出现列表错误

Posted

技术标签:

【中文标题】Actionscript 3 - 在我的 swf 中加载另一个 swf 时出现列表错误【英文标题】:Actionscript 3 - List error when loading another a swf in my swf 【发布时间】:2014-06-11 20:43:13 【问题描述】:

我正在开发一个 AS3/Flash 游戏,当我们在有人成功登录后将主页 swf 加载到我们的登录 swf 时遇到了问题。

TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChildAt()
at fl.controls::BaseButton/drawBackground()
at fl.controls::LabelButton/draw()
at fl.controls::Button/draw()
at fl.core::UIComponent/drawNow()
at fl.controls::List/drawList()
at fl.controls::List/draw()
at fl.core::UIComponent/callLaterDispatcher()

我们正在 Flash Builder 中进行开发,将包含艺术作品和组件的 .swc 导入到我们的项目中。我们加载主页 swf 并将其添加为显示对象,如下所示:

private function LoadComplete(e:Event):void
    
        //trace("LoadComplete");
        m_loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, LoadProgress);
        m_homePage = e.target.content as DisplayObject;
    

添加它:

addChild(m_homePage as DisplayObject);

有没有更好的方法将一个 swf 加载到另一个 swf 中?为什么通过登录 swf 加载主页 swf 时会报错,而单独调试主页时却不会?

任何建议都会很有帮助。

【问题讨论】:

尝试直接添加m_loader本身:addChild(m_loader) 【参考方案1】:

如果你想在你自己的 swf 中执行外部 swf,你需要使用SWFLoader

<mx:SWFLoader
  id="sfwLoader"
  
  />

并加载代码:

protected function loadSWF():void

    var loader:URLLoader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.BINARY;
    loader.addEventListener(Event.COMPLETE, onSWFLoaded);
    loader.load(new URLRequest("app-storage:/myOther.swf")); // sample location



protected function onSWFLoaded(e:Event):void

    var loader:URLLoader = URLLoader(e.target);
    loader.removeEventListener(Event.COMPLETE, onSWFLoaded);
    var context:LoaderContext = new LoaderContext();
    context.allowLoadBytesCodeExecution = true;
    context.applicationDomain = ApplicationDomain.currentDomain;
    sfwLoader.loaderContext = context;
    sfwLoader.addEventListener(Event.COMPLETE, loadComplete);
    sfwLoader.load(loader.data);


protected function loadComplete(completeEvent:Event):void

    var swfApplication:* = completeEvent.target.content;

这会影响任何 swf,因此存在潜在的安全漏洞。关于提供安全性的问题您可以检查:http://mabulous.com/air-applications-that-can-be-updated-without-requiring-admin-rights

【讨论】:

以上是关于Actionscript 3 - 在我的 swf 中加载另一个 swf 时出现列表错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 actionscript 3 自动刷新 swf 电影

将 ActionScript 2 SWF 转换为 ActionScript 3 SWF 文件(可以剥离代码)

Actionscript 3 从另一个/根 SWF 调用函数

如何使用 actionscript 在 flash builder 中将背景放在我的 swf 后面?

flash & Actionscript3 - 将对象传递给外部 swf

ActionScript 3 从外部swf调用函数