将一组Movie Clips添加到过滤器ActionScript 3中

时间:2011-11-02 10:23:30

标签: actionscript-3 filter effects

我将8 mc存储在一个数组中,我将它们放在舞台上。 现在我想申请这些mc的模糊效果。 我的问题是我不知道如何通过点击它来申请每个mc模糊效果。 因此,例如我在舞台上拥有所有mc,如果我点击其中一个,则单击的一个应具有模糊效果,依此类推。 如何将过滤器应用于mc? 谢谢你的时间

2 个答案:

答案 0 :(得分:1)

您可以遍历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;
}

答案 1 :(得分:0)

这样的事情(未经测试)应该有效:

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();

因为它们都是Movie Clips,所以你应该使用Vector而不是Array。