我正在寻找解决以下问题的最佳方法。我有一个包含movieclips的数组。所有的动画片段都有te类型,它们都位于舞台旁边。
在显示的动画片段上方,我有3个按钮,每个按钮类型,我想要做的是:我点击其中一个按钮,所有不匹配正确类型的动画片段应从舞台上移除,剩下的影片剪辑应该补间,以便它们再次相邻。 如果我再次单击该按钮,则应再次显示影片剪辑到它们所在的位置,并且应该再次将它们放在彼此旁边。
处理此问题的最佳方法是什么?
答案 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补间元素。