2010-09-24 82 views
0

我在精靈上有幾個濾鏡。在鼠標懸停我想訪問過濾器陣列中的一個過濾器,但我有一點麻煩試圖完成這一點。ActionScript - 檢索特定濾鏡的索引

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])])); 
    } 

上述代碼不起作用。什麼是獲得過濾器數組中特定過濾器索引的正確方法?

回答

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; 

} 
+0

謝謝。這應該工作。在你的示例代碼中只是一個小小的錯誤,我認爲你的循環條件應該是我 TheDarkIn1978 2010-09-24 13:20:23

+0

這就是它沒有測試寫它的內容;)現在修復它! – grapefrukt 2010-09-25 08:26:29