Могу ли я контролировать несколько экземпляров мувиклипов в загруженном SWF одновременно? - PullRequest
0 голосов
/ 03 марта 2011

Я загружаю SWF, созданный во Flash Professional CS5 через класс загрузчика, в приложение Flex 4.1. Флэш-файл содержит несколько фрагментов ролика, которые экспортируются для actionScript, и эти фрагменты ролика существуют во многих случаях по всему фильму.

Итерирование по всему, сравнение типов классов представляется наиболее простым, но и самым избыточным способом решения этой проблемы. Есть ли способ использовать имя класса в качестве своего рода глобального селектора для доступа к клипам?

Я мог бы также заставить субклипы во флэш-памяти прослушивать событие, в котором они выполняют действие, но я не совсем уверен, что может быть лучше.

Ответы [ 2 ]

0 голосов
/ 03 марта 2011

Полагаю, распечатка сделала свое дело.я использовал решение события:

в корневой временной шкале, я поместил функцию, подобную этой:

function cause():void {
    dispatchEvent(new Event("do stuff",true));
}

, и в основной временной шкале клипа библиотеки появится:

DisplayObject(root).addEventListener("do stuff", function (e:Event=null) {
    ... whatever ...         
});

это грязно, но вы поняли.

0 голосов
/ 03 марта 2011

В подобных случаях я считаю, что хорошим способом решения проблемы является создание статически доступного класса, который управляет экземплярами других классов, которые зарегистрированы в нем при создании экземпляра.В качестве примера ...

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 вы могли бы разрешить ему принимать объекты IStoppable или IPlayable, которые реализуют публичные функции stop () и play (), которые ваш подкласс movieclip (или объект не-movieclip, который также может нуждаться в остановке и воспроизведении!)затем реализует.

А что касается jQuery-подобных селекторов?Не совсем так, как я бы справился с этой конкретной проблемой.

...