我在精灵上有一些过滤器。在鼠标上我想访问过滤器数组中的一个过滤器,但我在尝试完成此操作时遇到了一些麻烦。
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])]));
}
上面的代码不起作用。什么是在过滤器数组中获取特定过滤器索引的正确方法?
答案 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;
}