我有一个包含一个投影滤镜的滤镜数组。跟踪数组包含对象后,trace为indexOf返回-1而不是0。请解释一下。
trace(filterObject);
trace(displayObject.filters);
trace(displayObject.filters.indexOf(filterObject));
//outputs:
//
// [object DropShadowFilter]
// [object DropShadowFilter]
// -1
答案 0 :(得分:1)
在应用过滤器时,看起来会在后台复制过滤器。也就是说,存储在filters数组中的过滤器与您传递的对象不同。由于indexOf比较对象引用,因此得到-1,表示传递给方法的对象未包含在数组中。
这个小片段更清楚地表明了这一点:
var filter:DropShadowFilter = new DropShadowFilter();
var sprite:Sprite = new Sprite();
sprite.filters = [filter];
trace(sprite.filters[0] == filter); // false!
值得注意的是,每个BitmapFilter都有一个clone()方法,我假设它是在内部调用以生成对象的新副本。