加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – 将组件添加到Swf库的正确方法是什么?

发布时间:2020-12-15 07:28:16 所属栏目:百科 来源:网络整理
导读:在开发Flash项目的过程中,我遇到了很多困扰我的问题.它看起来像这样: TypeError: Error #1009: Cannot access a property or method of a null object reference.at fl.containers::BaseScrollPane/fl.containers:BaseScrollPane::drawBackground()at fl.co
在开发Flash项目的过程中,我遇到了很多困扰我的问题.它看起来像这样:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at fl.containers::BaseScrollPane/fl.containers:BaseScrollPane::drawBackground()
at fl.controls::TileList/fl.controls:TileList::draw()
at fl.core::UIComponent/::callLaterDispatcher()
TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChildAt()
at fl.controls::BaseButton/fl.controls:BaseButton::drawBackground()
at fl.controls::BaseButton/fl.controls:BaseButton::draw()
at fl.core::UIComponent/drawNow()
at fl.controls::ScrollBar/fl.controls:ScrollBar::draw()
at fl.core::UIComponent/::callLaterDispatcher()

现在,就我而言,这个错误源于在代码中初始化组件时尚未明确添加到CS4中fla的组件库中.在过去,我尝试在代码中动态创建ScrollPanes时遇到了这个问题.我通过将ScrollPane组件添加到Main.fla的库中来解决它.这似乎有一段时间了.

现在,我正在尝试使用AstraFlash AutoComplete框.我已将适当的fla文件导入CS4,并将一个AutoComplete框放入我的Swf中.一切都很好,但加载Swf时会出现上述错误.我的想法是AutoComplete框试图创建ScrollPane作为其功能的一部分.好的,我理解这一点,所以我将ScrollPane组件添加到库中,结果相同.

通常我会搞乱库组件/设置,直到我摆脱错误,但我厌倦了碰到这个,我想知道解决问题的正确方法.所以,我有几个问题:

>您何时需要将组件添加到Fla的库而不是仅仅在代码中创建组件?
>您需要将哪些Flas添加到?只是一个使用它?或者Fla的所有父母呢?
>假设Autocomplete组件需要ScrollPane组件.添加单个组件时,为什么不识别此依赖关系?为什么我必须明确添加它?
>将组件添加到库中,并将其添加到库的“Component Assets”文件夹之间有什么区别?这个文件夹的用途是什么?

我真的需要这个AutoComplete组件才能工作.假设AS3代码是正确的,并且我仍然遇到上述错误,您认为哪些设置可能不正确?出于沮丧,我尝试将每个可能的组件添加到库,以及库的组件资源文件夹只是为了有一个起点,但我仍然得到错误.

任何帮助表示赞赏.

解决方法

我不确定我是否理解你的设置.我假设你有一个包含一些组件的子fla,你需要在父(loader)fla中创建这些组件的实例.

如果你将子fla中的类编译成父fla,它应该可以工作,但这会复制一些东西.

问题是当你加载swf时,这些类位于不同的ApplicationDomain中.
简单地说,这就是在swf中管理类的事情,因此你不会在加载器和加载的swf以及其他一些安全性东西之间发生类冲突.

我创建了一个简单的fla,它包含一个Button组件(fl.controls.Button),并从一个loader fla中加载它.我没有将Button组件添加到loader fla,但是使用加载的swf的应用程序域创建了一个按钮实例.这是如何做:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaded);
loader.load(new URLRequest('componentContainer.swf'));

function loaded(event:Event):void {
   addChild(loader.content);
   var SWFButton:Class = loader.contentLoaderInfo.applicationDomain.getDefinition('fl.controls.Button') as Class;
   var button = new SWFButton();
   button.label = 'Test';
   addChild(button);
}

在Programming Actionscript 3.0中有一个关于这个问题和如何使用ApplicationDomain的页面,但是我并没有完全理解它.

HTH,乔治

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读