过滤数组中的项目

时间:2011-06-17 15:42:40

标签: actionscript-3

我正在寻找解决以下问题的最佳方法。我有一个包含movieclips的数组。所有的动画片段都有te类型,它们都位于舞台旁边。

在显示的动画片段上方,我有3个按钮,每个按钮类型,我想要做的是:我点击其中一个按钮,所有不匹配正确类型的动画片段应从舞台上移除,剩下的影片剪辑应该补间,以便它们再次相邻。 如果我再次单击该按钮,则应再次显示影片剪辑到它们所在的位置,并且应该再次将它们放在彼此旁边。

处理此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您需要为每个MovieClip添加一些额外的数据。由于数据是动态的,您可以通过向其添加一些数据来轻松完成此操作:

myMovieClip.data =“red”;

然后你可以这样过滤:

onRedFilterClick(event:MouseEvent):void
{
    var n:int = theMovieClipsParent.numChildren;
    while (n--)
    {
        var mc:MovieClip = theMovieClipsParent.getChildAt(n) as MovieClip
        mc.visible = mc.data != "red";
    }
}

当然,有很多方法可以优化它,比如存储一个MovieClip数组,存储一个只有红色MovieClip的数组......等等。或者你可以扩展MovieClip,这样你就不会利用动态类。但这应该足以让你前进。请注意,需要替换MovieClipParent。

至于补间,嗯,这是一个稍微独立的问题。有很多关于补间的问题和答案。而且还有谷歌...

答案 1 :(得分:1)

或者,尝试使用Array.filter。

public function onRedFilterClick(event:MouseEvent):void
{
  var displayArray:Array = fullArray.filter(isRed);
  display(displayArray);
}

private function isRed(element:*, index:int, arr:Array):Boolean
{
  return (element.data == "red");
}

我遗漏了display()的实现。我通常使用Greensock的TweenNano补间元素。