ActionScript - 检索特定过滤器的索引

时间:2010-09-24 12:49:36

标签: actionscript-3 filter indexing

我在精灵上有一些过滤器。在鼠标上我想访问过滤器数组中的一个过滤器,但我在尝试完成此操作时遇到了一些麻烦。

mySprite.filters = [new DropShadowFilter(), new GlowFilter(), new BlurFilter()];
mySprite.addEventListener(MouseEvent.MOUSE_OVER, mouseOverEventHandler);

function mouseOverEventHandler(evt:MouseEvent)
     {
     //obtain indexOf the GlowFilter
     trace(evt.currentTarget.filters[evt.currentTarget.filters.indexOf([Object GlowFilter])]));
     }

上面的代码不起作用。什么是在过滤器数组中获取特定过滤器索引的正确方法?

1 个答案:

答案 0 :(得分:3)

如果我理解正确,你实际上是在尝试这样做:

 var index:int = evt.currentTarget.filters.indexOf([Object GlowFilter]);

括号中的部分是无效的Actionscript,它甚至不应该编译。您需要做的是迭代过滤器并自己测试它们,因为无法使用indexOf搜索特定的类。

请改为尝试:

function mouseOverEventHandler(evt:MouseEvent) {
    var glowFilter:GlowFilter;
    for (var i:int = 0; i < evt.target.filters.length; i++) {
        if (evt.target.filters[i] is GlowFilter) {
            glowFilter = evt.target.filters[i];
            break;
        }
    }
}

另外,如果您要使用数组中的过滤器,Flash将不接受就地修改,因此您需要在更改后重新设置数组:

function mouseOverEventHandler(evt:MouseEvent) {
    var glowFilter:GlowFilter;
    for (var i:int = 0; i < evt.target.filters.length; i++) {
        if (evt.target.filters[i] is GlowFilter) {
            glowFilter = evt.target.filters[i];
            break;
        }
    }

    if (!glowFilter) return;

    glowFilter.blurX = 10;
    var filters:Array = evt.target.filters;
    filters[i] = glowFilter;
    evt.target.filters = filters;

}