作者Jerrynet (我爱Hot_game板)
看板Flash
标题Re: [问题] FLEX 的 MXML
时间Sun Mar 30 01:21:26 2008
※ 引述《pikoto (被你镇压了>//////<)》之铭言:
: 借标题一问:
: Flex的 SWFLoder,载入由flash cs3做的a.swf
: 可以写在flex中直接来控制a.swf中的class吗?
: 用SWFLoader.content吗?还是用SWFLoader.data.但一直都是null.
: 谢谢.
: 处理资料用flex实在太方便了。
: ※ 引述《Jerrynet (我爱Hot_game板)》之铭言:
: : //也可以作别的处理,例如你要显示某网页在别的HTML component里
: : }
: : 以上为简略程式,你还要把HTMLLoader指定到你的HTML component的HTMLLoader属性,
: : 网页才会显示出来~@@
可以,这牵涉到stage,parent和root的关系
首先,单纯由flash产生的swf档案阶层关系如下:
SWF -> Stage -> MainTimeLine -> Stage(Stage可以有很多个子Stage)
直接在Flash画布上拉出的元件,和function,都在
SWF -> Stage -> MainTimeLine -> 元件/方程式
由Flex产生的swf:(以Adobe AIR 为例)
SWF --> Stage --> SystemManager --> WindowedApplication -->
mx元件或方程式
你可以试试看trace(this), trace(this.parent), trace(this.parent.parent), .....
来看这关系,
有趣的是,通常MainTimeLine有name属性,叫做"root1", 我目前还没发现有root2 ~XD
以你的例子来说, 如果你载入的SWF是由Flex产生的,则Help Content有说明如何控制和通
讯,在:
Help Content >
Adobe Flex 3 Help >
Controls >
SWFLoader Control
里有写如何用SystemManager Class 来控制
此外,用LocalConnection也可以和所载入的SWF作沟通,但这部份我不熟所以不讲了.
重点来了,如果你是用Flash产生的swf载入,以上方法都太麻烦的话,有硬干的方法:
首先先了解阶层关系:
.content
SWFLoader ----------> MainTimeLine(所载入swf的)
了解後,假设你把一个function写在场景第一格,ex:
funciton test(t:String):void(){
trace("你传入的字串是: "+t);
}
你要怎麽从Flex呼叫此函数呢?
如果你直接用:
SWFLoader.content.test("哈哈");
会传回错误,因为在编译阶段,SWFLoader.content是静态参考,也就是根本没有test这属性
所以该怎麽作呢?以下
在Flex里,ex:
<mx:Button x="431" y="128" label="按我送讯息到swf" click="send('哈哈');"/>
<mx:SWFLoader id="swf" source="test.swf" autoLoad="true" />
<mx:Script>
<![CDATA[
private function send(t:String):void{
Object(swf.content).test(t);
}
]]>
</mx:Script>
因为Object不是静态参考,所以编译时不会出现错误,且Object可以是任何物件,因此用
Object转换型别,这样就可以了.
那会有人问说怎麽不用MainTimeLine来转换type呢? 因为没有这物件阿XD
以上是我去年弄好久才了解的心得,请大家参考.....orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.70.112.43
1F:→ Jerrynet:反过来,从flash的swf控制flex,会有security error,用 03/30 01:33
2F:→ Jerrynet:LocalConnection或侦听swf事件才能稍稍解决 03/30 01:34
3F:推 pikoto:大感谢~原本找不到方法我就直接写在a.swf里直接蛮干了0.0 03/30 02:12
4F:→ Jerrynet:其实原本在Adobe AIR beta 1的时候更简单,但是後来有大更 03/30 02:32
5F:→ Jerrynet:动,原本我找到另一个方法不能用了,只好用这个,花了我不少 03/30 02:33
6F:→ Jerrynet:时间阿..... 03/30 02:33