2010-06-04 61 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