2011-06-17 51 views
0

我正在寻找最佳方法解决以下问题。我有一个包含movieclip的数组。所有的电影剪辑都有te类型,并且它们都位于彼此相邻的舞台上。过滤阵列中的项目

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

什么是最好的方法来处理这个问题?

+0

查看ArrayCollection过滤器函数 –

回答

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来补间元素。

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,这样你就不会利用动态类。但这应该足以让你走了。请注意,TheMovieClipsParent需要被替换。

至于补间,好吧,这是一个稍微单独的问题。关于补间有很多问题和答案。还有谷歌...