【问题标题】:filtering items in an array过滤数组中的项目
【发布时间】:2011-06-17 15:42:40
【问题描述】:

我正在寻找解决以下问题的最佳方法。我有一个包含影片剪辑的数组。所有的movieclips 都有te 类型,它们都被放置在舞台上并排在一起。

在显示的影片剪辑上方,我有 3 个按钮,每个按钮都代表一种类型,我想做的是:我单击其中一个按钮,所有与正确类型不匹配的影片剪辑都应从舞台上删除,然后应该对剩余的影片剪辑进行补间,以使它们再次彼此相邻。 如果我再次单击该按钮,则影片剪辑应再次显示到它们所在的位置,并且应再次彼此相邻放置。

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

【问题讨论】:

  • 查看ArrayCollection过滤函数

标签: actionscript-3


【解决方案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 来补间元素。

【讨论】:

    【解决方案2】:

    您需要为每个影片剪辑添加一些额外的数据。由于数据是动态的,您可以通过向其中添加一些数据来轻松做到这一点,如下所示:

    myMovieClip.data = "红色";

    然后你可以像这样过滤:

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

    当然,有很多方法可以对此进行优化,例如存储一组 MovieClips、存储一个仅包含红色 MovieClips 的数组……等等。或者您可以扩展 MovieClip,这样您就不会利用动态类。但这应该足以让你继续前进。请注意,MovieClipsParent 需要被替换。

    至于补间,那是一个稍微不同的问题。关于补间有很多问题和答案。还有谷歌...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      相关资源
      最近更新 更多