天天看點

Flex 和AS3 SWF互動(不需要Localconnection)

由于Localconncetion的某些限制(一台客戶隻可以使用特定名字的一個連接配接,這樣的程式如果開兩個視窗就會發生異常),今天閑着沒事做了一個 這樣的試驗。讓Flash CS3和Flex的代碼可以互相調用,為了顯示效果,我在雙方的界面分别放置了一個文本輸入框和一個按鈕。

這是Flex端的代碼:

[複制到剪貼闆] CODE: <?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>

    <![CDATA[       

        //把目前的application引用告訴swf

        private function onSwfLoaded(event:Event):void{

            Object(myloader.content).setApp(this);

        }

        //準備給swf調用的方法

        public function appshowtext(str:String):void{

            textinput.text=str;

        }

    ]]>

</mx:Script>

    <mx:SWFLoader id="myloader" source="local.swf" creationComplete="onSwfLoaded(event)"/>

    <mx:TextInput id="textinput"/>

    <mx:Button label="send to local.swf" click="Object(myloader.content).swfshowtext(textinput.text);"/>

</mx:Application>

這是Flash CS3裡面的第一幀的代碼:

[複制到剪貼闆] CODE: var app:Object;

display_txt.autoSize=TextFieldAutoSize.LEFT;

function swfshowtext(str:String):void{

    display_txt.text=str;

}

function setApp(ap:Object):void{

    this.app=ap;

}

mybtn.addEventListener(MouseEvent.CLICK,onClick);

function onClick(event:MouseEvent):void{

    app.appshowtext(display_txt.text);

}

如果大家有更好的辦法,或者更加正規的方式不妨直言!

基本上都是這麼做,adobe的做法也是這樣類似,是通過 ApplicationDomain.currentDomain.getDefinition,先獲得該加載swf的類的聲明,然後強轉 myloader.content,不過個人感覺多此一舉,我就是直接設定,唯一的好處是可以知道該swf轉換成什麼類,這樣共有屬性和方法就是可見的。

繼續閱讀