最近做一个决策分析项目,需要使用到FLEX,而在使用的过程中,逐渐的接触到了FLASH,突然发现,用FLASH来做动画或者图表,用FLEX与JAVA后台进行交互,是一个非常方便的事情。唯一的障碍莫过于,FLEX与FLASH之间的数据交互。
其实这本身也不难,解决的方法就是通过Actionscript3.0.这需要注意的是,Flash cs5以上的版本才支持AS3.0,更以前的版本只支持AS2.0,我用的FlexBuilder是4.6,同样支持AS3.0。这样促使了As3.0可以完美的成为中间桥梁
以下代码为FLEX端
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx=" http://ns.adobe.com/mxml/2009 " xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)"> <fx:Script> <![CDATA[ import mx.events.FlexEvent; private var flexArr:Array = new Array(); protected function swfLoader_completeHandler(event:Event):void { // flash加载完成后,传入参数 Object(swfLoader.content).InitApp(this,this.flexArr,"交互测试"); } protected function application1_creationCompleteHandler(event:FlexEvent):void { this.flexArr.push(1111,2222,3333,4444); swfLoader.source="flash/RecComp.swf"; } ]]> </fx:Script> <s:SWFLoader source="" id="swfLoader" width="190" height="373" left="100" top="100" complete="swfLoader_completeHandler(event)" /> </s:Application>
从上面代码可以看出,FLEX调用了一个RecComp.swf的Flash文件,在这个swf中,要写一个InitApp方法,传入一个对象(供FLASH调用FLEX,后续讲)一个数组用来存值和一个标题,如下
import flash.display.MovieClip; import flash.display.Sprite; import flash.text.TextField; stop(); var flexApp:Object; function InitApp(ap:Object,aarFlex:Array,titleMsg:String):void { this.flexApp = ap; var array:Array = new Array(); var rec1:Rec1 = new Rec1(); var rec2:Rec2 = new Rec2(); var rec3:Rec3 = new Rec3(); var rec4:Rec4 = new Rec4(); var rec5:Rec5 = new Rec5(); var rec6:Rec6 = new Rec6(); var rec7:Rec7 = new Rec7(); var rec8:Rec8 = new Rec8(); array.push(rec1,rec2,rec3,rec4,rec5,rec6,rec7,rec8); var format:TextFormat = new TextFormat("微软雅黑",22,"0x663300"); format.bold="bold"; format.align = "center"; var tf:TextField=new TextField(); tf.height=30; tf.width=100; tf.x=12.15; tf.y=47.3; tf.text=titleMsg; tf.setTextFormat(format); addChild(tf); for(var i:int=0;i<aarFlex.length;i++){ array[i].x=15; array[i].y=300 - 35*i; var recInfo:RecInfo=new RecInfo(); recInfo.x=155; recInfo.y=300 - 35*i - 3; recInfo.titleInfo.text=aarFlex[i]+"人"; addChild(array[i]); addChild(recInfo); setChildIndex(array[i],i+1); } }
function InitApp(ap:Object,aarFlex:Array,titleMsg:String):void 这个方法为主要接收参数。至于里面别的代码,是我自己做的无件,与交互不相关。这个组件我会发至网盘,里面还包含了通过Flash来做动画,做元件等、供大家交流
时间: 2024-10-29 19:07:14