flex与flash交互详解
总的来说,Flex与flash的交互主要分成三种:
1、flash发送事件,flex接收事件;
2、flex调用flash的方法。
3、flash调用flex方法
在这里主要讲前两种,总的来说,这两种交互并没有特殊的难的地方,下面分别给出两个简单的例子
一、flash发送事件,flex接收
(1)首先打开flash cs,这里我用的是flash cs 4,直接拖拽一个简单的按钮,其命名为ozbutton,在主时间轴上添加动作,其代码如下
stop();
ozbutton.addEventListener(MouseEvent.CLICK,OzClick);
function OzClick(evt:MouseEvent):void
{
trace("test button");
dispatchEvent(new Event("test"));
}
代码很简单,就是发出一个事件,事件的名称叫做test
(2)Flex中接收事件,并做出响应运作,这部分也是算比较 简单,我直接贴代码。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
private function FlashComplete(event:Event):void
{
var flashMc:MovieClip = flashContent.content as MovieClip;
flashMc.addEventListener("test",SayHello);
}
private function SayHello(event:Event):void
{
mx.controls.Alert.show("HELLO 小能");
}
]]>
</mx:Script>
<mx:Image x="200" y="200" id="flashContent" source="cn/com/egova/umgis/flex/image/flash/eye.swf" complete="FlashComplete(event)" />
</mx:Application>
简单的来分析一下,用image装载一个swf,当装载结束后,获取其内容,其内容为一个电影剪辑,并添加一个监听即可。
但是实际过程中,仍然要注意的是:
1、分发事件应该是在主时间轴,否则会产生监听不到的情况,如果不在主时间轴上,那么其事件应该将冒泡设置为true,如 new Event(“test”,true) ;
2、如果需要在Flash内部分发事件中带有参数的话,那么必须采用自定义事件,那么应该采用如下的方法:
因为在flash as中,如果采用自定义事件,必须在外部自定义As文件,如下所示(clipEvent .as):
package {
import flash.events.Event;
public class clipEvent extends Event {
public static const CLIP_CLICK:String="clip_click";
private var _mm:String;
public function clipEvent() {
super(CLIP_CLICK,true);
}
public function get M() {
return _mm;
}
public function set M(a:String) {
_mm=a;
}
}
}
as文件的位置可以用include方式(as 2.0)来进行引用,其格式如下:
//上一级
include "../1a.as"
//子级
include "文件夹名/1a.as"
但是同级的情况下不要用:
/*同级include "1a.as"
否则会报1037:包不能嵌套的错误。
在as 3.0下,应该采用import 方式,而不再用include。import 使用方式:
import flashevent.*;
定义完自定义事件之后,便可以直接调用 ,下面为调用上面自定义事件的代码:
var p:clipEvent=new clipEvent()
var r:Number = 25;
p.M = r.toString();
trace(p.M);
dispatchEvent(p);
在flex端接收上述事件的代码如下:
private function SayHello(event:Event):void {
if(flashMc!=null){
var obj:Object = Object(event);
var angle:Number = Number(obj.data);
trace("flash:"+angle.toString());
}
}
二、 flex调用flash的方法
这个比较简单,在flash中直接编写函数,直接调用即可,同样,也必须在主时间轴上,否则会产生调用不到的情况。
所有版权归小能所有哦!!!