`
nlslzf
  • 浏览: 1044999 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flex加载外部swf文件[flex-swf and flash as3 swf],并且互相通讯

阅读更多
http://blog.csdn.net/zyjasp/archive/2008/05/16/2452175.aspx
第一步:建立加载类[CtmObjLoader],此类可以加载文件类型 [图片文件或swf文件]
package
{

import flash.display.DisplayObject;
import flash.display.Loader;
import flash.events.*;
import flash.net.URLRequest;

import mx.core.UIComponent;

public class CtmObjLoader extends UIComponent
{
  private var ProgressHandle:Function=null;
  public var loader:Loader;
  public var _bLoaded:Boolean=false;
  public var _bShow:Boolean=true;
  //@UrlRequest  加载的地址
  //@progressHandle 加载中的处理过程
  //bShow  加载后是否显示出来 
  public function CtmObjLoader(UrlRequest:String=null,progressHandle:Function=null,bShow:Boolean=true)
  {
   super();
   if(UrlRequest)LoadThis(UrlRequest,progressHandle,bShow);
  }
  public function LoadThis(UrlRequest:String,progressHandle:Function=null,bShow:Boolean=true):void{
   RemoveChild();
            loader = new Loader();
            _bShow=bShow;
            ProgressHandle=progressHandle;
            configureListeners(loader.contentLoaderInfo);
            if(_bShow)addChild(loader);//如果需要显示,则addchild
            var request:URLRequest = new URLRequest(UrlRequest);
            loader.load(request);   
  }
  public function UnLoadThis():void{
   try{
    RemoveChild();
    this.parent.removeChild(this);
   }catch(e:Error){}
   //this=null; 
  }
  public function get content():DisplayObject{
   if(!_bLoaded)return null;
   return loader.content;
  }
  public function RemoveChild():void{
            if(_bLoaded){
             try{
              DeleteListeners(loader.contentLoaderInfo);
              loader.unload();
              if(_bShow)removeChild(loader);
              loader=null;
              _bLoaded=false;
             }catch(e:Error){throw new Error('Define ObjLoader Remove Error')}
            } 
  }
        private function configureListeners(dispatcher:IEventDispatcher):void {
            dispatcher.addEventListener(Event.COMPLETE, completeHandler);
            dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
            dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            if(ProgressHandle!=null)dispatcher.addEventListener(ProgressEvent.PROGRESS, ProgressHandle);
                 
        }
        private function DeleteListeners(dispatcher:IEventDispatcher):void {
            if(dispatcher.hasEventListener(Event.COMPLETE))dispatcher.removeEventListener(Event.COMPLETE, completeHandler);
            if(dispatcher.hasEventListener(HTTPStatusEvent.HTTP_STATUS))dispatcher.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
            if(dispatcher.hasEventListener(IOErrorEvent.IO_ERROR))dispatcher.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            if(dispatcher.hasEventListener(ProgressEvent.PROGRESS))
             if(ProgressHandle!=null)dispatcher.removeEventListener(ProgressEvent.PROGRESS, ProgressHandle);        
        }
        private function completeHandler(event:Event):void {
         this.width=loader.content.width;
         this.height=loader.content.height;
         _bLoaded=true;        
         dispatchEvent(new Event(Event.COMPLETE));
        }

        private function httpStatusHandler(event:HTTPStatusEvent):void {
         dispatchEvent(new Event(HTTPStatusEvent.HTTP_STATUS));
        }
        private function ioErrorHandler(event:IOErrorEvent):void {
   dispatchEvent(new Event(IOErrorEvent.IO_ERROR));
        }

}
}
第二步:建立加载[flash as3 swf文件]类
//此类专提供flash as3 swf文件加载,flex swf不需要,当然也可以写成一个类,我习惯这样
package
{
import flash.display.MovieClip;

public class mySwfLoader extends CtmObjLoader
{
  public function mySwfLoader(UrlRequest:String=null, progressHandle:Function=null, bShow:Boolean=true)
  {
  
   super(UrlRequest, progressHandle, bShow);
  }
  public function get movieClip():MovieClip{
   if(!_bLoaded)return null
   return content as MovieClip;
  }
 
}
}
第三步:建立flex主文件1[mainforflex.mxml]加载flex swf外部文件用
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="ManageView.*" fontSize="12">
<mx:Script>
  <![CDATA[
   import Package.mySwfLoader;
   /*
   Flex 控制加载外部的swf文件[子文件为flex版]
   */
   import mx.managers.SystemManager;
   import mx.controls.Alert;
   import Package.CtmObjLoader;
   import flash.utils.setTimeout;
   [Bindable]private var _CtmObjLoader:mySwfLoader;
   private var LoadedSM:SystemManager;
   private var loadedMoiveClip:MovieClip;
   private function LoadSwf():void{
    LoadedSM=null;
    loadedMoiveClip=null;
    if(_CtmObjLoader){
     _CtmObjLoader.LoadThis('flexchild.swf');//child.swf自己定义去吧
    }else{
   
     _CtmObjLoader=new mySwfLoader('flexchild.swf');
     _CtmObjLoader.addEventListener(IOErrorEvent.IO_ERROR,OnFailHandle);
     _CtmObjLoader.addEventListener(Event.COMPLETE,OnCompleteHandle);
     this.addChild(_CtmObjLoader);

    }
    _CtmObjLoader.setStyle('horizontalCenter',0);
    _CtmObjLoader.setStyle('verticalCenter',0);   
   }
   private function OnFailHandle(e:Event):void{
    mx.controls.Alert.show('error');
   }
   private function OnCompleteHandle(E:Event):void{
    LoadedSM=SystemManager(_CtmObjLoader.content);
   } 
   private function OnTestCall(e:Event):void{
    Alert.show('Child Event Call');
   }  
   private function MCtestCall():void{
    if(LoadedSM){
     try{
      LoadedSM.document.TestCall('From Parent Call');//TestCall为加载的文件public函数
     
     }catch(e:Error){
      Alert.show(e.message);
     }
    }else{
     Alert.show('请加载文件');
     return;
    }
   }
   private function testAddChildListener():void{
    if(!_CtmObjLoader){Alert.show('请加载文件');return;}
    try{
     LoadedSM.document.addEventListener("EventGoTOParent",OnTestCall);
     Alert.show('设置成功');
    }catch(e:Error){Alert.show(e.message)}
   }
  ]]>
</mx:Script>
<mx:Button label="加载flex子文件" click="LoadSwf();" x="26" y="10"/>
<mx:Button label="为加载的文件设置Listener" click="testAddChildListener();" x="150" y="10"/>
<mx:Button label="测试加载的文件函数" click="MCtestCall();" x="342" y="10"/>
</mx:Application>
第四步:建立flex swf子文件[flexchild.mxml]
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="750" height="444"
  applicationComplete="initApp()" styleName="Border3" fontSize="12">
<mx:Script>
<![CDATA[
  import mx.controls.Alert;

  private function initApp():void{
 
  }
  public function TestCall(msg:String):void{
   mx.controls.Alert.show(msg);
  }
  private function EventGoToParent():void{
   dispatchEvent(new Event('EventGoTOParent'));
  }
   
]]>
</mx:Script>
<mx:Button x="327" y="148" label="向Parent通知事件" click="EventGoToParent()"/>

</mx:Application>
运行试试,加载flex swf文件完成,下面讲加载flash cs3 swf文件吧
第一步:建立flex主文件1[mainforflash.mxml]加载flash cs3 swf外部文件用
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="ManageView.*" fontSize="12">
<mx:Script>
  <![CDATA[
   /*
   Flex 控制加载外部的swf文件[子文件为flash cs3 版]
   */
   import mx.controls.Alert;
   import Package.mySwfLoader;
   import flash.utils.setTimeout;
   [Bindable]private var _mySwfLoader:mySwfLoader;
   private var LoadedSM:MovieClip;
   private function LoadSwf():void{
    if(_mySwfLoader){
     _mySwfLoader.LoadThis('flashchild.swf');//flashchild.swf你自己去写了,我不太会,但我做了一个简单的,可用的
    }else{
   
     _mySwfLoader=new mySwfLoader('flashchild.swf');
     _mySwfLoader.addEventListener(IOErrorEvent.IO_ERROR,OnFailHandle);
     _mySwfLoader.addEventListener(Event.COMPLETE,OnCompleteHandle);
     this.addChild(_mySwfLoader);

    }
    _mySwfLoader.setStyle('horizontalCenter',0);
    _mySwfLoader.setStyle('verticalCenter',0);   
   }
   private function OnFailHandle(e:Event):void{
    mx.controls.Alert.show('error');
   }
   private function OnCompleteHandle(E:Event):void{
    if(_mySwfLoader.content)Alert.show('ok0');
    try{
     LoadedSM=_mySwfLoader.movieClip;
    }catch(e:Error){Alert.show(e.message)}
   } 
   private function OnTestCall(e:Event):void{
    Alert.show('Child Event Call');
   }  
   private function gotoAndPlay(frame:int=0):void{
    //(_CtmObjLoader.loader.content as MovieClip).
    if(LoadedSM){
     try{
      LoadedSM.gotoAndPlay(frame);
     
     }catch(e:Error){
      Alert.show(e.message);
     }
    }else{
     Alert.show('请加载文件');
     return;
    }
   }
   private function stop():void{
    if(LoadedSM){
     try{
      LoadedSM.stop();
     
     }catch(e:Error){
      Alert.show(e.message);
     }
    }else{
     Alert.show('请加载文件');
     return;
    }   
   }
   private function play():void{
    if(LoadedSM){
     try{
      LoadedSM.play();
     
     }catch(e:Error){
      Alert.show(e.message);
     }
    }else{
     Alert.show('请加载文件');
     return;
    }   
   }  
   private function testAddChildListener():void{
    if(!_mySwfLoader){Alert.show('请加载文件');return;}
    var d:DisplayObject=_mySwfLoader.content;
    try{
     LoadedSM.addEventListener("EventGoTOParent",OnTestCall);
     Alert.show('设置成功');
    }catch(e:Error){Alert.show(e.message)}
    //_Url=urltxt.text;
   }
  ]]>
</mx:Script>
<mx:Button label="加载flash子文件" click="LoadSwf();" x="26" y="10"/>
<mx:Button label="为加载的文件设置Listener" click="testAddChildListener();" x="160" y="10"/>
<mx:Button label="测试加载的文件函数gotoAndPlay(0)" click="gotoAndPlay(int(frametxt.text));" x="351" y="10"/>
<mx:TextInput id="frametxt" x="623" y="10" width="63"/>
</mx:Application>

第二步:写flash cs3 文件,这个不在行,我写了个简单的测试,通过 的,所以你就自己写吧
可以调用flash cs3 文件的函数,也可以监听他发来的事件
分享到:
评论
1 楼 suqingyu666 2011-09-27  
这个东西好像不行啊!         flex swf子文件[flexchild.mxml]  这个东西是做什么的!

相关推荐

    flash builder 4.7加载外部swf文件

    在Flash开发领域,Flash Builder 4.7是一个重要的集成开发环境(IDE),它主要用于构建基于Adobe Flex和ActionScript的应用程序,包括SWF文件。SWF是Adobe Flash Player用于展示交互式内容、动画以及应用程序的标准...

    关于flex与flash生成swf文件的加载(体积)问题

    这篇文章将深入探讨关于使用Flex和Flash生成SWF文件时所遇到的加载(体积)问题。SWF是Adobe Flash Player用于播放多媒体内容的文件格式,通常包含了动画、音频、视频和交互式元素。 Flex是一个开源的开发框架,...

    flex加载as2写的swf,内容是一个很雷的网页游戏AD

    在本文中,我们将深入探讨如何在Flex应用中加载由ActionScript 2(AS2)编写的SWF文件,以及这背后的原理和技术细节。Flex是一种基于Adobe Flash Platform的开放源码框架,主要用于构建富互联网应用程序(RIA)。而...

    Flex控制外部引用SWF的播放进度源码

    在Flex中加载外部SWF文件,我们可以使用`Loader`类。`Loader`类是ActionScript 3.0中的核心组件,负责加载各种类型的媒体,包括图像、视频和SWF文件。以下是一个基本的加载SWF的示例代码: ```actionscript var ...

    Flex中加载SWF方法

    Flex中加载SWF方法,介绍了flex 对 swf 加载和处理

    Flex控制SWF播放

    在本文中,我们将深入探讨如何使用Flex来控制SWF(Shockwave Flash)文件的播放。Flex是一种基于ActionScript 3的开源框架,主要用于构建富互联网应用程序(RIA)。它提供了丰富的用户界面组件和强大的数据绑定机制...

    Flex控制swf简单源码

    在Flex应用中,我们经常需要动态加载外部的SWF文件,以实现模块化设计或者扩展功能。加载SWF文件的核心在于使用`Loader`类,它是AS3中的一个核心组件,负责加载各种类型的媒体资源,包括SWF文件。 以下是一段基本的...

    swf-file-format-spec.pdf.zip_flex_swf

    "swf-file-format-spec.pdf.zip_flex_swf" 提供了关于SWF文件格式的详细规范,这对于开发者尤其是使用Flex工具进行SWF开发的人来说至关重要。 首先,SWF文件是一种二进制文件格式,它包含了图形、音频、视频和...

    flex加载swf的N种方法.zip

    flex加载swf的N种方法.zip

    Flex通讯系列---Flex与SWF(一)

    这里讲述的是在Flex Application中嵌套一个SWF,然后实现Flex与SWF相互间的通讯。我们需要引入SystemManager接口实现。 环境:Eclipse + Flex Builder

    Flash课件制作教程-加载SWF文件

    本教程将重点讲解如何在Flash中加载SWF文件,这是一项关键的技术,能够帮助开发者实现课件之间的交互性和资源共享。下面将详细阐述这一过程。 首先,SWF全称为"Small Web Format",是Adobe Flash的文件格式,用于在...

    Flex中SWF和SWF文件之间的通信案例

    该案例中TestLocalConnection为主SWF文件加载了TestLocalConnectionReceiver.SWF,两者之间是在同一个域下的通信,工程代码编译路径需要下载者手动修改下。其他技术细节参见Flex_API中的LocalConnection章节。本机...

    Flash加载swf文件的沙箱问题

    如果SWF需要加载外部的字体资源,它必须确保正确处理沙箱限制,否则加载可能会失败。在ActionScript 3中,可以使用`flash.text.Font.embedFonts`静态方法来嵌入字体,但这同样受到沙箱限制。开发者需要确保字体文件...

    flex jsp 嵌套 swf html

    SWF(ShockWave Flash)是Adobe Flash Player支持的文件格式,用于在Web上播放动画和多媒体内容。Flex编译的结果就是SWF文件,它可以包含交互式的图形、视频和音频。在系统拓扑图的应用中,SWF可以高效地展示网络...

    SWF之间通信、Flex与SWF之间通信

    在探讨SWF之间以及Flex与SWF之间的通信时,我们首先需要了解SWF文件的基本概念及其在Adobe Flash平台中的作用。SWF(Shockwave Flash)是一种被广泛应用于网页动画、游戏和其他交互式内容的格式。随着互联网技术的...

    Flash(Flex)反编译及修改

    对于Flash和Flex,这个过程涉及到将SWF文件(Flash的执行格式)还原成ActionScript代码,以及可能的MXML(Flex的应用界面描述语言)。 2. **SWF文件结构**: SWF文件是Flash Player理解和执行的二进制格式,包含了...

    as3swf AS3库

    AS3SWF是一款强大的ActionScript 3(AS3)库,主要用于处理和创建Adobe Flash的SWF文件格式。在AS3中,它提供了丰富的功能,帮助开发者解析、操作和生成SWF内容。AS3SWF库在Flash平台的开发中扮演着重要角色,尤其是...

    [转] [Flash/Flex] 加载SWF性能VS影片剪辑性能

    本文将详细探讨“加载SWF性能VS影片剪辑性能”的主题,基于提供的博客链接(https://as3.iteye.com/blog/1454896),我们将深入分析这两种技术在不同场景下的优劣,以及如何根据具体需求来选择最合适的实现方式。...

    Flex3控制多个SWF文件在MXML文件里做360度的随机运动

    在Flex中,可以使用`Loader`类来加载外部的SWF文件。这使得开发者可以在运行时动态插入新的内容,增加了应用的灵活性和可扩展性。 4. **动态运动控制**:在Flex中,可以使用ActionScript来控制SWF对象的运动。例如...

Global site tag (gtag.js) - Google Analytics