2009-11-29 47 views
0

給出這種情況:當SWF被加載到另一個。主SWF可以讀取已加載的SWF文件以檢索其內容並對其進行修改嗎?

  • 我在Illustrator或Flash中有一個很酷的圖形。
  • 圖形代表一個圖形,裏面有各種元素,形狀,線條,漸變等。
  • 我將其導出到swf文件,如果打開它,我可以查看我的漂亮圖形。
  • 我有一個(純)as3應用程序,它加載了swfs。

則...

  • 我可以操縱加載的SWF文件的內容。例如:移動它的內容,改變裏面的一些元素,複製它們。用變換矩陣和類似的東西變形它們?
  • 我可以,至少讀主要應用程序內的內容並複製它們(圖形數據)。

據我一直在研究,我只能導入瑞士法郎,並使用它作爲一個整體的顯示對象,沒有任何孩子,我不能修改它。

我想以某種方式使用外部swf的圖形信息,以允許主應用程序變形或使用它來製作新版本的圖形。

回答

1

沒有,可悲的是,你不能檢索或更改編譯圖形元素的細節,你只能把它們作爲的DisplayObject並通過他們的公共屬性(縮放,旋轉,變換,等...)改造他們。 有一種programmaticaly通過將其設置爲Flash IDE中對象的「指南」並在onEnterFrame中檢索對象的位置來檢索單個路徑座標的方式,但正如您可以想象的那樣,它非常髒。

您可以通過將它們設置爲加載的SWF中的類(在Flash IDE中:庫>符號>屬性>導出爲AS)或使用BitmapData在主電影中按照您的請求繪製它們來複制剪輯。

另一種解決方案是使用一種更開放的格式,如SVG或FXG,但它可以變得很複雜......

+0

SVG正是我想避免使用外部主權財富基金,但恐怕沒有其他的方式(至少現在)。感謝您的回答。 – yizzreel 2009-11-29 23:14:58

0

如果兩者都是AVM2 movies,則可以訪問加載的SWF的方法和屬性。

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete); 
private function onLoadComplete(e:Event):void 
{ 
    var content:Object = LoaderInfo(e.target).content; 
    //assuming there is a public someMethod() defined in 
    //the document class of the loaded SWF, you can call it as: 
    content.someMethod(); 
    //you can access any property you wish 
    content.someObject.graphics.beginFill(0x00ff00); 
    content.someObject.graphics.drawCircle(10, 10, 10); 
    content.someObject.graphics.endFill(); 
} 
+0

感謝您指出AVM的兼容性,在我的應用程序中不是問題,但知道這是一件好事。 那麼,關於使用加載器,我已經在使用它來檢索內容。我的問題的關鍵是如果我可以檢索到我的主要導入的對象信息。比如顏色,漸變,筆畫,我可以在圖形類中使用的東西。 例如,如果我LAOD帶有長方形的SWF中,有2像素的行程和線性漸變填充頂部底部,我想修改,知道什麼顏色和大小都在導入的SWF的圖形實例使用對象 – yizzreel 2009-11-29 18:36:58

+0

是的,你可以。 'graphics'只是加載對象的另一個公共屬性 - 您可以訪問它。檢查我的更新以瞭解如何在加載的SWF上繪製綠色圓圈。 – Amarghosh 2009-11-30 04:46:12

+0

您不能修改與CS3完成的圖紙,雖然 – Amarghosh 2009-11-30 05:07:22

相關問題