Posts Tagged ‘SWF’

  • 从途径上将,SWF文件有3种。1,Flash生成的。2,Flex MXML 生成的。3,Flex AS生成的。

    对于比较大型的项目,一般会采取将各个模块分为多个SWF,使用时调用的方法。

    这里先不提及域的问题。

    对于Flash或者是Flex AS生成的SWF文件,被Load以后,content中的对象,是我们预期定义的类。但Flex MXML生成的SWF文件,被Load以后,content中的对象,是systemmanager,我们在mxml的<application>标签中定义的所有内容,被保存在systemmanager.application中。

    下面的例子可以证明这个问题,并且说明了如何调用加载的各种SWF中的属性与方法。

    FlashChild.as //生成Flash SWF

    package {
    import flash.display.Sprite;
    
    public class FlashChild extends Sprite
    {
    public function FlashChild()
    {
    }
    
    public var str:String = 'This is the Flash SWF';
    }
    }
    

    AsChild.as //生成Flex AS SWF

    package {
    import flash.display.Sprite;
    
    public class AsChild extends Sprite
    {
    public function AsChild()
    {
    }
    
    public function show():String{
    return str;
    }
    
    private var str:String = 'www.czbin.com';
    }
    }
    

    Child.mxml //生成Flex MXML SWF

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
    <![CDATA[
    import mx.controls.Alert;
    public function show():void{
    Alert.show("Thanks");
    }
    public var str:String = 'www.czbin.com'
    ]]>
    </mx:Script>
    <mx:Label text=”Welcom to” id=”mx_label”/>
    </mx:Application>
    

    Parent.mxml //调用上面3个SWF的主文件

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init();initAs();initFlash()">
    <mx:Script>
    <![CDATA[
    import mx.core.UIComponent;
    import mx.controls.Alert;
    
    private var childApp:Object;
    
    private var AsChild:Object;
    
    private var FlashChild:Object;
    
    public function init():void{
    var url:String = 'Child.swf';
    var request:URLRequest = new URLRequest(url);
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandle);
    loader.load(request);
    }
    
    public function initAs():void{
    var url:String = 'AsChild.swf';
    var request:URLRequest = new URLRequest(url);
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,AsCompleteHandle);
    loader.load(request);
    }
    
    public function initFlash():void{
    var url:String = 'FlashChild.swf';
    var request:URLRequest = new URLRequest(url);
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,FlashCompleteHandle);
    loader.load(request);
    }
    
    private function completeHandle(e:Event):void{
    var UI:UIComponent = new UIComponent();
    
    UI.addChild(e.target.content);
    
    addChild(UI);
    
    childApp = e.target.content;
    }
    
    private function AsCompleteHandle(e:Event):void{
    AsChild = e.target.content;
    }
    
    private function FlashCompleteHandle(e:Event):void{
    FlashChild = e.target.content;
    }
    
    private function showChildVar():void{
    Alert.show(childApp.application.mx_label.text+" "+childApp.application.str)
    }
    
    private function showChildFun():void{
    childApp.application.show();
    }
    
    private function showAsSWF():void{
    Alert.show(AsChild.show());
    }
    
    private function showFlashSWF():void{
    Alert.show(FlashChild.str);
    }
    ]]>
    </mx:Script>
    <mx:Button label=”Show Welcome” click=”showChildVar()”/>
    <mx:Button label=”Show Thanks” click=”showChildFun()”/>
    <mx:Button label=”Show AsSWF” click=”showAsSWF()”/>
    <mx:Button label=”Show FlashSWF” click=”showFlashSWF()”/>
    </mx:Application>
    

    把上面生成的前3个SWF拷贝到下面工程的BIN目录中。