Добавить массив видеоклипов в фильтр ActionScript 3 - PullRequest
0 голосов
/ 02 ноября 2011

я сохранил 8 mc в массиве и положил их на сцену. Теперь я хочу применить к этим MC эффект размытия. Моя проблема в том, что я не знаю, как применить к каждому mc эффект размытия, нажав на него. Так, например, у меня есть все mc на сцене, и если я нажму на одну из них, у нажатой будет эффект размытия и так далее. Как применить фильтр к MC? Спасибо за ваше время

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Вы можете перебрать массив mc и добавить прослушиватели событий для каждого из них:

var mcArrayLength:int = mcArray.length();
for (var i:int = 0; i < mcArrayLength; i++) {
  var mc:MovieClip = mcArray[i] as MovieClip;
  mc.addEventListener(MouseEvent.CLICK, onMcClick);
}

и обработчик события:

function onMcClick(e:MouseEvent):void
{
  var clickedMc:MovieClip = e.currentTarget as MovieClip;
  clickedMc.filters = [myBlurFilter];
}

Конечно, если вы хотите иметь только один размытый mc за раз, вы должны сохранить ссылку на него и удалить размытие при нажатии на другой mc:

var currentlyClickedMc:MovieClip;

function onMcClick(e:MouseEvent):void
{
  var clickedMc:MovieClip = e.currentTarget as MovieClip;
  clickedMc.filters = [myBlurFilter];
  if (currentlyClickedMc) currentlyClickedMc.filters = [];
  currentlyClickedMc = clickedMc;
}
0 голосов
/ 02 ноября 2011

что-то вроде этого (непроверенное) должно работать:

package
{
    //Imports
    import flash.events.MouseEvent;
    import flash.filters.BlurFilter;

    //Class
    public function ClickToBlur
    {
        //Variables
        private var clickableObjects:Array;

        //Constructor
        public function ClickToBlur(clickableObjects:Array)
        {
            this.clickableObjects = clickableObjects;

            init();
        }

        //Initialize
        private function init():void
        {
            for each (var object:Object in clickableObjects)
            {
                object.addEventListener(MouseEvent.CLICK, clickMouseEventHandler);
            }
        }

        //Click Mouse Event Handler
        private function clickMouseEventHandler(evt:MouseEvent):void
        {
            if (evt.currentTarget.filters == [])
            {
                evt.currentTarget.filters = [new BlurFilter()];
            }
            else
            {
                evt.currentTarget.filters = [];
            }
        }

        //Dispose
        public function dispose():void
        {
            for each (var object:Object in clickableObjects)
            {
                object.removeEventListener(MouseEvent.CLICK, clickMouseEventHandler);
            }
        }
    }
}

просто передайте ваш массив новому экземпляру класса

var ctb:Object = new ClickToBlur(myArrayOfObjects);

и очистите, когда вы закончите:

ctb.dispose();

, так как все они являются видеоклипами, вы должны использовать вектор вместо массива.

...