Flash Loader Flex

4

本文作者:dmh2002  发布于:2008-6-12  分类:Flash  点击:


   我一直都以为Flex里面可以loader flash编译的swf,而倒过来不行。这样的错误认知是建立在几次不成功的尝试以及朋友之间的交流。

    但其实,从原理上来说,这是不可被理解的,大家都是swf,用的都是同一个虚拟机,虽然实现不同,但是底层是相同的。

    所以,今天我和我的同事又再次尝试了一次,出乎我的意料,丝毫没有周折的,flash 很容易的loader了flex编译的swf,我有点脸红,并开始反思原因,为什么我之前都会失败呢?

    实现的代码相当之简单

   package { 
         import flash.display.Loader;
         import flash.display.MovieClip;
         import flash.events.Event;
         import flash.net.URLRequest;

         [SWF(width="320", height="320",frameRate="24",backgroundAlpha="0")]
         public class test1 extends MovieClip
         {
                 private var _loader:Loader         
  
                public function test1()                
                {
                    this._loader = new Loader()                
                    this._loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete)
                    this._loader.load( new URLRequest("flexTest.swf"))
                }
  
               private function onComplete(e:Event):void
               {
                  this.addChild( e.target.content );
               }
         }
   }

   其实问题出在 this.addChild( e.target.content );经过测试发现,当loader成功,而不将loader进来的对象加入显示列表的时候就会报错,而我之前几次的尝试都没有做这一步,这是一个很小的问题,发一篇blog,一来感谢我的同事,二来郑重的更正我之前认识。
 

 

4 Comments

3tion
addChild看来很关键啊。
mani
呵呵, 好像Loader不是容器, 只负责加载数据而已, 如果用Flex里的ModuleLoader就不会出现这样的问题.
可惜看不到Loader的源码呢 flash包里的源码哪里看的到?
dmh2002
1、loader是显示对象
2、flash的包不是开源的,所以看不到,但是flex的sdk是开源的。
2009
好象还有问题,加载是显示出来了,
但是点FLEX的组件还是会报错?比如载入后点击下拉列表组件
TypeError: Error #1009: 无法访问空对象引用的属性或方法。
at mx.controls::ComboBox/displayDropdown()
at mx.controls::ComboBox/downArrowButton_buttonDownHandler()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()
at mx.controls::Button/http://www.adobe.com/2006/flex/mx/internal::buttonPressed()
at mx.controls::Button/mouseDownHandler()

Write a comment ?