【发布时间】:2011-11-02 10:23:30
【问题描述】:
我将 8 个 mc 存储在一个数组中,然后将它们放在舞台上。 现在我想对这些 mc 应用模糊效果。 我的问题是我不知道如何通过单击为每个 mc 应用模糊效果。 因此,例如,我在舞台上拥有所有 mc,如果我单击其中一个,则单击的那个应该具有模糊效果,依此类推。 如何将过滤器应用于mc? 谢谢你的时间
【问题讨论】:
标签: actionscript-3 filter effects
我将 8 个 mc 存储在一个数组中,然后将它们放在舞台上。 现在我想对这些 mc 应用模糊效果。 我的问题是我不知道如何通过单击为每个 mc 应用模糊效果。 因此,例如,我在舞台上拥有所有 mc,如果我单击其中一个,则单击的那个应该具有模糊效果,依此类推。 如何将过滤器应用于mc? 谢谢你的时间
【问题讨论】:
标签: actionscript-3 filter effects
您可以遍历 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;
}
【讨论】:
BlurFilter 的属性以查看单击的 MC 的视觉差异?你能显示完整的源代码吗?
container 的父级。在这种情况下,每次单击 MC 时,您都应该将此 MC 重新添加到父级(这会将 MC 移动到显示列表的顶部)。此代码应进入onMcClick 函数:container.addChild(clickedMc)
name属性设置为想要的编号,转换为String,例如:myMC.name = myNumber.toString();
这样的东西(未经测试)应该可以工作:
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();
因为它们都是电影剪辑,所以你应该使用向量而不是数组。
【讨论】:
=,你想要一个==