同时Flex也可以接收Flash发出的事件,从而实现相互通信的数据交互。
1、首先使用flash cs3建一个as 3的flash文件,建二帧,在第一帧用文本工具写上Hello World,并在第一帧上写上如下代码:
HelloWorld!
- stop();
- function gonext():void
- {
- gotoAndPlay(2);
- }//定义一个gonext的函数,作用为跳到第二帧;
2、在第二帧上用文本工具写上:
“我是大将军”的文本
再制作一个调用flex函数是按钮button,命名为ozbutton,
然后写下如下代码:
- stop();
- ozbutton.addEventListener(MouseEvent.CLICK,OzClick);
- function OzClick(evt:MouseEvent):void
- {
- dispatchEvent(new Event("OKTWO"));
- }//为ozbutton添加一个监听鼠标点击的事件,当鼠标点击时,发送一个OKTWO的广播事件
3、这样flash的制做就完成了,命名为flash;
flash [olor=orange]下面说下在flex里如何调用[/color]
4、首先建一个名为flex_flash的flex工程,用一个image的组件来加载刚制做的flash文件;
- <mx:Image x="111" y="88" source="flash/flash.swf" complete="FlashComplete(event)" id="flashContent"/>
5、当flash加载完成之后会触发complete事件,并调用FlashComplete(event)函数;
- private function FlashComplete(event:Event):void
- {
- flashMc=flashContent.content as MovieClip;
- flashMc.addEventListener("OKTWO",SayHello);
- }
6、flashMc是一个MovieClip类,并把flashContent.content赋值给它,这样flashMc就相当于你刚制做的flash,你可以使用它来调用里面的函数;完整的代码如下
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
- <mx:Script>
- <![CDATA[
- import mx.controls.Button;
- import mx.controls.Alert;
- private var flashMc:MovieClip
- private function FlashComplete(event:Event):void
- {
- flashMc=flashContent.content as MovieClip;
- flashMc.addEventListener("OKTWO",SayHello);
- }
- private function NextFrame():void
- {
- flashMc.gonext();
- }
- private function SayHello(event:Event):void
- {
- Alert.show("HELLO World");
- }
- ]]>
- </mx:Script>
- <mx:Image x="111" y="88" source="flash/flash.swf" complete="FlashComplete(event)" id="flashContent"/>
- <mx:Button x="182" y="222" label="NextFrame" click="NextFrame()" id="b"/></mx:Application>
1、主程序文件TestFlex_Flash.mxml源代码:
Mxml代码
<?xml version="1.0"encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute" xmlns:local="*">
//
</mx:Application>
2、TestComponent.mxml源代码
Mxml代码
<?xml version="1.0"encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"width="400" height="300" xmlns:local="*">
<!--下面注释掉的代码就是加载Flash制作的swf的,加载完成后,Flex就可以用swfgame这个对象的content属性表示调用该Flash程序的代码了-->
<!--
</mx:Canvas>
3、非可视组件VisualView.as源代码
package
{
protected var view : Object;
protected var id :String;
public function initialized( document : Object, id : String ) :void
{
this.view = document;
this.id = id;
}
public functionVisualView()
{
}
public functiontestView():void{
Alert.show("调用无视图方法。");
}
Public functioninvokeFlashMethod():void{
}
}
Flash端程序
1、帧里(或者文档类)代码如下
Java代码
import flash.utils.Timer;
import flash.events.TimerEvent;
var flexApp:Object;
function setApp(ap:Object):void {
this.flexApp=ap;
//myC.passFlex(flexApp);
var time:Timer=new Timer(1000,1);
time.start();
time.addEventListener(TimerEvent.TIMER_COMPLETE,toFlex);
}
var myC:MyClass=new MyClass();
//下面这个方法测试调用Flex程序代码的效果,通过下面的四个调用也可以看出Flex代码中各组件的从属关系
function toFlex(eve:TimerEvent){
flexApp.testf();
flexApp.component.testf();
flexApp.component.view.testView();
flexApp.component.parentApplication.parentMethod();
myC.passFlex(flexApp);
}
2、Flash自定义类MyClass类源代码
Java代码
package {
}