фильтрация элементов в массиве - PullRequest
0 голосов
/ 17 июня 2011

Я ищу лучший подход к следующей проблеме. У меня есть массив, который содержит мувиклипы. Все видеоклипы имеют тип te, и все они расположены на сцене рядом друг с другом.

Над отображаемыми видеоклипами у меня есть 3 кнопки, каждая из которых символизирует тип, и я хочу сделать следующее: я нажимаю на одну из кнопок, и все видеоклипы, которые не соответствуют нужному типу, должны быть удалены со сцены, Оставшиеся мувиклипы должны затем переместиться, чтобы они снова оказались рядом друг с другом. Если я снова нажму кнопку, то видеоклипы должны снова отобразиться там, где они были, и все они должны быть снова расположены рядом друг с другом.

Как лучше всего справиться с этим?

Ответы [ 2 ]

1 голос
/ 18 июня 2011

В качестве альтернативы попробуйте использовать 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 голос
/ 17 июня 2011

Вам необходимо добавить дополнительные данные в каждый мувиклип. Поскольку данные являются динамическими, вы можете легко сделать это, добавив к ним некоторые данные, например:

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";
    }
}

Конечно, есть множество способов оптимизировать это, например, сохранить массив MovieClips, сохранить массив только красных MovieClips ... и так далее. Или вы можете расширить MovieClip, чтобы не использовать динамический класс. Но этого должно быть достаточно, чтобы вы пошли. Обратите внимание, что theMovieClipsParent необходимо заменить.

Что касается твининга, то это немного отдельная проблема. Есть много вопросов и ответов о твининге. И есть также Google ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...