无法在 AS3 中的影片剪辑上创建过滤器

Can't create filter on movieclips in AS3

经过与 flash 的长期斗争...

我有一些电影片段,我想只对我 MOUSE_OVER 的那个电影片段使用滤镜。

对于每个单独的动画片段,必须有不同于键入 MOUSE_OVER 和 MOUSE_OUT 的方法。

您可以通过多种方式解决此问题。

最佳:

使用继承。

如果您创建的 class 文件具有一组项目的所有通用功能,您可以让 MovieClip 继承该功能。因此,您将在根目录中创建一个如下所示的文件。 (姑且称之为FilteredMC.as

package {
    import flash.events.MouseEvent;

    public class FilteredMC extends MovieClip {

        //the function that matches the name of class, is what runs when the object is created
        public function FilteredMC():void {
            this.addEventListener(MouseEvent.MOUSE_OVER, mouseOver);
            this.addEventListener(MouseEvent.MOUSE_OUT,mouseOut);
        }

        private function mouseOver(e:MouseEvent):void {
            this.filters = [...your filter...]
        }

        private function mouseOut(e:MouseEvent):void {
            this.filters = [];
        }
    }
}

然后在FlashPro中,右击你的库对象应该有这个功能,去“属性”,然后选择"export for actionscript"然后在“base class”文本字段,输入:FilteredMC。把你喜欢的任何东西作为 class 名称(只要它是唯一的并且不与任何其他 class 或关键字冲突)


好:

如果您的所有项目都是容器的唯一子项,您可以遍历该容器的所有子项并添加代码:(您也可以使用项目数组来执行此操作)

var i:int = containerMC.numChildren;
while(i--){
    if(containerMC.getChildAt(i) is MovieClip){
        setupFilter(containerMC.getChildAt(i) as MovieClip);
    }
}

function setupFilter(mc:MovieClip):void {
    mc.addEventListener(MouseEvent.MOUSE_OVER, mouseOver);
    mc.addEventListener(MouseEvent.MOUSE_OUT,mouseOut);
}

function mouseOver(e:MouseEvent):void {
    //the event's 'currentTarget' property is the item you added the listener to
    MovieClip(e.currentTarget).filters = [...your filter...]
}

function mouseOut(e:MouseEvent):void {
    MovieClip(e.currentTarget).filters = [];
}