【问题标题】:Adobe Flash Builder (flex4): addChild() is not available in this class.Adobe Flash Builder (flex4):addChild() 在此类中不可用。
【发布时间】:2011-01-02 16:15:31
【问题描述】:

我想将一个 swf 加载到一个 flex 4 应用程序中以便使用它的类。

var ldr:Loader=new Loader();
ldr.load(new URLRequest("file://path/to/fileswf"));
ldr.contentLoaderInfo.addEventListener(Event.INIT, loaded);
function loaded(evt:Event):void { addChild(ldr); }

我收到错误:

错误:addChild() 在此类中不可用。相反,使用 addElement() 或修改皮肤(如果有的话)。
在 spark.components.supportClasses::SkinnableComponent/addChild()[E:\dev\gumbo_beta2\frameworks\projects\spark\src\spark\components\supportClasses\SkinnableComponent.as:966]
在 main/private:init/loaded()[C:\Documents and Settings\ufk\Adobe Flash Builder Beta 2\xpogames-toolkit-test\src\main.mxml:22]

如果我将addChild() 更改为addElement(),我会收到以下编译错误:

1067:将 flash.display:Loader 类型的值隐式强制转换为不相关的类型 mx.core:IVisualElement。 main.mxml path/dir line 22 Flex 问题

任何想法如何解决这个问题?

【问题讨论】:

    标签: apache-flex flex4 loader flash-builder addchild


    【解决方案1】:

    this.rawChildren.addChild(ldr) 应该工作

    【讨论】:

      【解决方案2】:

      在 flash builder 4 完整版中,没有 this.rawChildren。

      解决该问题的最佳方法是将每个必需的类转换为一个弹性组件,并在您的弹性应用程序中使用它:

      1. 下载并安装 flex 组件套件 http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex_skins

      2. 创建影片剪辑

      3. 转换为弹性组件

      4. 在这个类中添加相关函数

      附加到即将转换为 flex 组件的影片剪辑的类的骨架:

      package {
      import mx.flash.UIMovieClip;
      import flash.text.TextField;
      import flash.events.Event;
      import flash.events.MouseEvent;
      public dynamic class challenge_screen extends UIMovieClip {
      
          public function challenge_screen() {
              super();
          }
      }
      } 
      

      【讨论】:

      • 扩展至 MovieClip 然后添加至 UI​​Component 也可以。
      【解决方案3】:

      创建另一个容器来放置 displayObject:

      // container ( IVisualElement ) for DisplayObjects
      var container:UIComponent = new UIComponent();
      addElement( container );
      
      // displayObject goes to container
      var displayO:Sprite = new Sprite();
      container.addChild( displayO );
      

      【讨论】:

      • 与来自 ActionScript SDK 的 Facebook Distractor 完美配合。谢谢。
      • @Scott 创建了一个包装元素,我认为....我会挖掘它,但我无法再访问该代码,这是一份旧工作!
      【解决方案4】:
      private var _loader:SWFLoader = new SWFLoader();
      private var _uicomponent:UIComponent = new UIComponent();
      private function swfLoaded(event:Event):void 
      {
      Alert.show("inside swf Loaded");
      var content:DisplayObject =_loader.content;
      _uicomponent.addChild(content);
      } 
      public function loadSWF () : void 
      {   
      
      _loader.addEventListener(Event.INIT, swfLoaded);
      _loader.load("http://intelliveysoft.com:5080/myelearn/Admin.swf"); 
      addElement(_uicomponent);
      }
      

      试试这个。它会工作

      【讨论】:

      • 不要只发布一段代码,请解释为什么这段代码可以解决所提出的问题。没有解释,这不是答案。
      猜你喜欢
      • 2011-04-06
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2012-11-30
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      相关资源
      最近更新 更多