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"));
}

image

代码很简单,就是发出一个事件,事件的名称叫做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中直接编写函数,直接调用即可,同样,也必须在主时间轴上,否则会产生调用不到的情况。

posted @ 2010-07-12 16:26  GIS小能  阅读(2735)  评论(1编辑  收藏  举报