Как я могу повлиять на весь массив? - PullRequest
0 голосов
/ 27 июня 2011

У меня есть массив, который я использую для хранения видеоклипов, и я хотел бы иметь возможность изменить их все сразу, используя массив. Теперь я могу сделать это, используя array[0,1,2,3,4,5,6,7,8...].changestuff, но с примерно 60 мувиклипами это становится громоздким. Есть ли более простой способ просмотреть весь массив и применить изменения к каждому сохраненному в нем мувиклипу?

Ответы [ 3 ]

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

Если у вас есть массив MovieClips примерно так:

var a:Array = new Array;
for ( var j:int = 0; j < 10; j++ )
    a[j] = new MovieClip;

У вас есть 3 способа пройти по нему и воздействовать на все мувиклипы внутри него. Первый является основным для цикла:

var len:int = a.length;
for ( var i:int = 0; i < len; i++ )
{
    var mc:MovieClip = a[i];
    trace( mc );
}

Основной цикл for - это самый быстрый способ циклического перемещения по массиву. Вам просто нужно найти MovieClip по определенному индексу, используя оператор скобок. a[i] вернет MovieClip с текущим индексом (например, a[0] вернет MovieClip в начале массива, a[1] следующий и т. Д.).

Вы также можете сделать для ... каждый:

for each( var mc:MovieClip in a )
    trace( mc );

Циклы For..each немного медленнее, чем обычные циклы for, но имеют дополнительное преимущество, поскольку имеют прямой доступ к объекту, уже приведенному. Это может быть довольно удобно

И, наконец, используйте метод forEach():

a.forEach( this._loopFunc );

private function _loopFunc( mc:MovieClip, index:int, a:Array ):void
{
    trace( mc + " is at index " + index + " in array " + a );
}

Я никогда не видел, чтобы forEach() использовался где-либо, но вы можете найти его полезным Для обратного вызова вам нужно объявить 3 параметра: объект, индекс и сам массив.

Более подробную информацию вы можете найти в документации по массиву: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html

0 голосов
/ 27 июня 2011

Лучший способ манипулировать всем массивом одновременно - это использовать метод map.

A mapping пример из Adobe LiveDocs

    public function arrayMap() {
        var arr:Array = new Array("one", "two", "Three");
        trace(arr); // one,two,Three

        var upperArr:Array = arr.map(toUpper);
        trace(upperArr); // ONE,TWO,THREE
    }

    private function toUpper(element:*, index:int, arr:Array):String {
        return String(element).toUpperCase();
    }

В вашем случае вы просто написали бы метод обратного вызова, который манипулирует вашими мувиклипами, если это необходимо, и возвращает MovieClip вместо String.

0 голосов
/ 27 июня 2011

Другой способ - использовать:

for(var item in collection) { ... }

Не указан в ссылке.

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