我通過加載器類將flash專業版cs5中創建的swf加載到flex 4.1應用程序中。 Flash文件包含多個爲動作腳本導出的影片剪輯,這些影片剪輯存在於整個影片的許多實例中。我可以同時控制加載的swf中的多個movieclip實例嗎?
遍歷所有東西,比較類的類型似乎是最容易的,但也是解決這個問題的最多餘方式。有什麼辦法使用類名作爲一種全局選擇器來訪問剪輯?
我也可以讓Flash中的子剪輯偵聽他們執行某個動作的事件,但我不確定最好是什麼。
我通過加載器類將flash專業版cs5中創建的swf加載到flex 4.1應用程序中。 Flash文件包含多個爲動作腳本導出的影片剪輯,這些影片剪輯存在於整個影片的許多實例中。我可以同時控制加載的swf中的多個movieclip實例嗎?
遍歷所有東西,比較類的類型似乎是最容易的,但也是解決這個問題的最多餘方式。有什麼辦法使用類名作爲一種全局選擇器來訪問剪輯?
我也可以讓Flash中的子剪輯偵聽他們執行某個動作的事件,但我不確定最好是什麼。
我想打出來的伎倆。我使用的事件的解決方案:
在根時間軸我把這樣的功能:
function cause():void {
dispatchEvent(new Event("do stuff",true));
}
,並在庫剪輯的主時間軸雲:
DisplayObject(root).addEventListener("do stuff", function (e:Event=null) {
... whatever ...
});
這是骯髒的,但你得到這個想法。
在這些情況下,我發現解決問題的一個好方法是創建一個靜態可訪問的類來管理在實例化時註冊的其他類的實例。作爲一個例子...
public class GlobalStopper{
private static var clips:Array = [];
public static function add(mc:MovieClip):void{
clips.push(mc);
}
public static function stop():void{
var mc:MovieClip;
for(var i:int = 0, ilen:int = clips.length ; i < ilen ; i++){
mc = clips[i] as MovieClip;
if (mc) mc.stop();
}
}
}
和...
public class GloballyStoppableMovieClip extends MovieClip{
public function GloballyStoppableMovieClip(){
GlobalStopper.add(this);
}
}
任何及所有GloballyStoppableMovieClip的情況下,會立即與GlobalStopper註冊,因此調用
GlobalStopper.stop();
...會停止所有註冊的影片剪輯。
你可以添加任何你想要的其他功能。此外,不必添加接受MovieClip實例,您可以讓它接受實現公共函數stop()和play()的動畫片段子類的IStoppable或IPlayable對象(或者也可能需要停止並播放的非動畫片段對象!)。然後執行。
但對於類似jQuery的選擇器?不是我處理這個特定問題的方式。
也是一個不錯的方法!謝謝,我也會給出一個想法! – DasAntonym 2011-03-02 22:24:40