我正在寻找最佳方法解决以下问题。我有一个包含movieclip的数组。所有的电影剪辑都有te类型,并且它们都位于彼此相邻的舞台上。过滤阵列中的项目
在上面显示的影片剪辑中,我有3个按钮,每个模拟一个类型,我想要做的是:我点击其中一个按钮,所有不匹配正确类型的影片剪辑都应从舞台上移除,其余的影片剪辑应该补间,以便再次彼此相邻。 如果我再次单击该按钮,则应该再次显示影片剪辑到他们所在的位置,并且应该再次放在彼此旁边。
什么是最好的方法来处理这个问题?
我正在寻找最佳方法解决以下问题。我有一个包含movieclip的数组。所有的电影剪辑都有te类型,并且它们都位于彼此相邻的舞台上。过滤阵列中的项目
在上面显示的影片剪辑中,我有3个按钮,每个模拟一个类型,我想要做的是:我点击其中一个按钮,所有不匹配正确类型的影片剪辑都应从舞台上移除,其余的影片剪辑应该补间,以便再次彼此相邻。 如果我再次单击该按钮,则应该再次显示影片剪辑到他们所在的位置,并且应该再次放在彼此旁边。
什么是最好的方法来处理这个问题?
或者,尝试使用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来补间元素。
您需要为每个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需要被替换。
至于补间,好吧,这是一个稍微单独的问题。关于补间有很多问题和答案。还有谷歌...
查看ArrayCollection过滤器函数 –