Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 将电影剪辑数组添加到筛选器ActionScript 3_Actionscript 3_Filter_Effects - Fatal编程技术网

Actionscript 3 将电影剪辑数组添加到筛选器ActionScript 3

Actionscript 3 将电影剪辑数组添加到筛选器ActionScript 3,actionscript-3,filter,effects,Actionscript 3,Filter,Effects,我将8台mc存储在一个阵列中,然后将它们放在舞台上。 现在我想应用到这些mc的模糊效果。 我的问题是,我不知道如何通过点击来应用模糊效果。 例如,我在舞台上有所有的mc,如果我点击其中一个,点击的那个应该有模糊效果,等等。 如何将过滤器应用于mc? 感谢您抽出时间类似的(未经测试)应该可以: package { //Imports import flash.events.MouseEvent; import flash.filters.BlurFilter; /

我将8台mc存储在一个阵列中,然后将它们放在舞台上。 现在我想应用到这些mc的模糊效果。 我的问题是,我不知道如何通过点击来应用模糊效果。 例如,我在舞台上有所有的mc,如果我点击其中一个,点击的那个应该有模糊效果,等等。 如何将过滤器应用于mc? 感谢您抽出时间

类似的(未经测试)应该可以:

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();

因为它们都是电影剪辑,所以您应该使用向量而不是数组。

您可以在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);
}
当然,如果您一次只想有一个模糊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;
}

你有一个
=
,你想要一个
==
修复;)。。。但仍然未经测试:pDo这段代码有错误吗?您是否正确定义了
BlurFilter
的属性以查看单击的MC的视觉差异?你能展示完整的源代码吗?我已经做了。我对“currentTarget”和“.target”有一个问题,所以它只在我使用“target”而不是“currentTarget”时起作用。你能给我解释一下如何为我的mc做父母吗?我的意思是被点击的mc应该在前台。假设您的mc有一个名为
container
的父级。在这种情况下,每次单击MC时,您都应该将此MC重新添加到父级(这会将MC移动到显示列表的顶部)。这个代码应该放在
onMcClick
函数中:
container.addChild(clickedMc)
你能告诉我如何为每个mc分配一个数字吗?因为当mc在网格上的顺序正确时,应该显示一些内容。或者如果你有一个想法我怎么做谢谢你对不起,我不明白你想达到什么目的。但对于简单的编号,您可以将MC的
name
属性设置为所需的数字,转换为
String
,例如:
myMC.name=myNumber.toString()
var currentlyClickedMc:MovieClip;

function onMcClick(e:MouseEvent):void
{
  var clickedMc:MovieClip = e.currentTarget as MovieClip;
  clickedMc.filters = [myBlurFilter];
  if (currentlyClickedMc) currentlyClickedMc.filters = [];
  currentlyClickedMc = clickedMc;
}