Настройка фильтра в массиве происходит не так, как ожидалось

#flash #actionscript-3 #tween

#flash #actionscript-3 #анимация

Вопрос:

У меня есть этот массив MovieClips (btnArr) и массив GlowFilters (gloArr):

 var btnArr:Array = new Array(aBtn, bBtn, cBtn);
var gloArr:Array = new Array();
var glow:GlowFilter = new GlowFilter(0x00aaff, 0,
                                     12, 12,
                                     5, 1,
                                     false, false);
for (var i = 0; i < btnArr.length; i  ) {
        gloArr[btnArr[i].name] = glow;
        btnArr[i].filters = [gloArr[btnArr[i].name]];
}
 

Однако, когда я позже в своем коде настраиваю один из светящихся фильтров в массиве, кажется, что он применяет анимацию ко всем из них.

 var btnTween:Tween = new Tween(gloArr[e.currentTarget.name], "alpha",
                               Strong.easeIn,
                               gloArr[e.currentTarget.name].alpha, 1, 1, true);
trace(gloArr.indexOf(btnTween.obj));
 

У меня настроены трассировки, которые, похоже, показывают, что пока я не объявлю, что анимация идет так, как ожидалось, но последняя трассировка показывает -1, и когда я проверяю значения каждого отдельного фильтра в массиве, все они увеличиваются и уменьшаются вместе. Есть идеи?

Ответ №1:

Если a правильно вас понял, вы хотите переключать свечение только одной из кнопок, верно?

Если это так, вам нужно создавать отдельные экземпляры glow объекта каждый раз, когда вы его назначаете btnArr[i].filters = [glow] . В вашем коде вы используете только один экземпляр GlowFilter и используете его для всех кнопок.

Комментарии:

1. Большое спасибо! Вы абсолютно правы, создав экземпляр безымянного фильтра для каждой позиции в gloArr нем, теперь он работает абсолютно идеально. Еще раз спасибо.