Re: [問題] FLEX 的 MXML 回pikoto

看板Flash作者 (我愛Hot_game板)時間18年前 (2008/03/30 01:21), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
※ 引述《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

03/30 01:33, , 1F
反過來,從flash的swf控制flex,會有security error,用
03/30 01:33, 1F

03/30 01:34, , 2F
LocalConnection或偵聽swf事件才能稍稍解決
03/30 01:34, 2F

03/30 02:12, , 3F
大感謝~原本找不到方法我就直接寫在a.swf裡直接蠻幹了0.0
03/30 02:12, 3F

03/30 02:32, , 4F
其實原本在Adobe AIR beta 1的時候更簡單,但是後來有大更
03/30 02:32, 4F

03/30 02:33, , 5F
動,原本我找到另一個方法不能用了,只好用這個,花了我不少
03/30 02:33, 5F

03/30 02:33, , 6F
時間阿.....
03/30 02:33, 6F
文章代碼(AID): #17xdgP-8 (Flash)