我将8 mc存储在一个数组中,我将它们放在舞台上。 现在我想申请这些mc的模糊效果。 我的问题是我不知道如何通过点击它来申请每个mc模糊效果。 因此,例如我在舞台上拥有所有mc,如果我点击其中一个,则单击的一个应具有模糊效果,依此类推。 如何将过滤器应用于mc? 谢谢你的时间
答案 0 :(得分:1)
您可以遍历mc的数组并在每个数组上添加事件侦听器:
var mcArrayLength:int = mcArray.length();
for (var i:int = 0; i < mcArrayLength; i++) {
var mc:MovieClip = mcArray[i] as MovieClip;
mc.addEventListener(MouseEvent.CLICK, onMcClick);
}
和事件处理程序:
function onMcClick(e:MouseEvent):void
{
var clickedMc:MovieClip = e.currentTarget as MovieClip;
clickedMc.filters = [myBlurFilter];
}
当然,如果你想一次只有一个模糊的mc,你应该保留对它的引用,并在点击另一个mc时删除模糊:
var currentlyClickedMc:MovieClip;
function onMcClick(e:MouseEvent):void
{
var clickedMc:MovieClip = e.currentTarget as MovieClip;
clickedMc.filters = [myBlurFilter];
if (currentlyClickedMc) currentlyClickedMc.filters = [];
currentlyClickedMc = clickedMc;
}
答案 1 :(得分:0)
这样的事情(未经测试)应该有效:
package
{
//Imports
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
//Class
public function ClickToBlur
{
//Variables
private var clickableObjects:Array;
//Constructor
public function ClickToBlur(clickableObjects:Array)
{
this.clickableObjects = clickableObjects;
init();
}
//Initialize
private function init():void
{
for each (var object:Object in clickableObjects)
{
object.addEventListener(MouseEvent.CLICK, clickMouseEventHandler);
}
}
//Click Mouse Event Handler
private function clickMouseEventHandler(evt:MouseEvent):void
{
if (evt.currentTarget.filters == [])
{
evt.currentTarget.filters = [new BlurFilter()];
}
else
{
evt.currentTarget.filters = [];
}
}
//Dispose
public function dispose():void
{
for each (var object:Object in clickableObjects)
{
object.removeEventListener(MouseEvent.CLICK, clickMouseEventHandler);
}
}
}
}
将数组传递给类的新实例
var ctb:Object = new ClickToBlur(myArrayOfObjects);
并在完成后清理:
ctb.dispose();
因为它们都是Movie Clips,所以你应该使用Vector而不是Array。