2010-06-04 63 views
0

我有一个包含一个投影滤镜的滤镜阵列。在跟踪数组包含对象之后,trace对indexOf返回-1而不是0。请解释。ActionScript跟踪数组indexOf?

trace(filterObject); 
trace(displayObject.filters); 
trace(displayObject.filters.indexOf(filterObject)); 

//outputs: 
// 
// [object DropShadowFilter] 
// [object DropShadowFilter] 
// -1 

回答

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()方法,我以为被内部调用,使对象的新副本。

+0

humm ...所以没有办法可靠地跟踪过滤器数组中的过滤器的索引吗? – TheDarkIn1978 2010-06-04 02:18:28

+0

除了使用循环和检查过滤器的类型之外,我不这么认为。 – 2010-06-04 02:21:43

+0

你如何检查过滤器的类型?使用toString()?还是有更合适的方法? – TheDarkIn1978 2010-06-04 02:57:10