将影片剪辑数组添加到过滤器 ActionScript 3

发布于 2024-12-13 04:18:13 字数 152 浏览 2 评论 0原文

我将 8 个 mc 存储在一个数组中,然后将它们放在舞台上。 现在我想对这些MC应用模糊效果。 我的问题是我不知道如何通过单击来为每个 mc 应用模糊效果。 例如,我在舞台上拥有所有MC,如果我单击其中之一,则被单​​击的MC应该具有模糊效果等等。 如何将过滤器应用到MC上? 谢谢你的时间

i stored 8 mc's in an array an i put them on the stage.
now I want to apply to these mc's a blur effect.
My problem is that i don't know how to apply for every mc the blur effect by clicking on it.
So for example I have all the mc's on the stage and if I click on one of them the clicked one should have the blur effect and so on.
How to apply the filter to the mc's?
Thank you for you time

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

国粹 2024-12-20 04:18:13

您可以循环遍历 mc 的数组并在每个 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;
}

You can loop through the mc's array and add event listeners on each of them:

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

and the event handler:

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

of course, if you wanted to have only one blurred mc at a time, you should keep a reference to it and remove blur once another mc is clicked:

var currentlyClickedMc:MovieClip;

function onMcClick(e:MouseEvent):void
{
  var clickedMc:MovieClip = e.currentTarget as MovieClip;
  clickedMc.filters = [myBlurFilter];
  if (currentlyClickedMc) currentlyClickedMc.filters = [];
  currentlyClickedMc = clickedMc;
}
○闲身 2024-12-20 04:18:13

像这样的东西(未经测试)应该可以工作:

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

因为它们都是影片剪辑,所以您应该使用 Vector 而不是 Array。

something like this (untested) should work:

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

just pass your array to a new instance of the class

var ctb:Object = new ClickToBlur(myArrayOfObjects);

and clean up when your done:

ctb.dispose();

since they're all Movie Clips, you should use a Vector instead of an Array.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文