Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   array.foreach (http://www.flasher.ru/forum/showthread.php?t=132672)

shumylo 18.11.2009 03:01

array.foreach
 
Добрый вечер

есть вот такой код

Код AS3:

 
 var b:Array = new Array ();
                        b[0] = MovieClip(parent).bozament;
                        b[1] = MovieClip(parent).leister;
                        b[2] = MovieClip(parent).seion;
                        b[3] = MovieClip(parent).protan;
 
                        addEventListener (MouseEvent.MOUSE_DOWN, run)
 
                        function run (e:MouseEvent)
                        {
 
                                b.forEach(showThem)
 
                                function showThem ()
                                {
                                        alpha = 0;
                                }
 
                                e.target.alpha = 100;
                        }

Проблема в том, что при щелчке на одном из мувиклипов forEach проганяется не для всех, а 4 раза для e.target функции run.
Не подскажите как изменить чтобы для всех проганялся?

Хочу чтобы при щелчке на одному мувике другие гасли.

dmitriev 18.11.2009 03:48

Код:

for each(var item in b) {
    item.alpha = 0;
}

Возможно это поможет на первое время, но продолжив писать в кадрах, обязательно наткнётесь на кучу ошибок.

kackbip 18.11.2009 06:14

В качестве аттрибута метода showThem должен выступать элемент массива.

Felicast 18.11.2009 09:07

может как-то так?
Код AS3:

function showThem (item:Object)
{
        item.alpha = 0;
}


ToRR 18.11.2009 09:30

тогда уж
Код AS3:

function showThem (item:Object)
{
        (item as DisplayObject).alpha = 0;
}


wvxvw 18.11.2009 10:32

1. кроме как ради красивостей нет никакого смысла использовать Array.forEach(), Array.filter(), Array.map() и т.п... просто цикл будет быстрее.
2. Подпись у функции передаваемой в параметре выглядид на самом деле так:
Код AS3:

function foo(item:*, index:int, all:Array):void

3. Не используйте анонимные функции. Никогда.

Код AS3:

var array:Array = [1, 2, 3];
array.forEach(foo);
function foo(item:int, index:int, all:Array):void
{
        trace(item, index, all);
}
/*
1 0 1,2,3
2 1 1,2,3
3 2 1,2,3
*/


r_r_f_r 18.11.2009 13:59

Цитата:

Сообщение от wvxvw (Сообщение 866352)
1. кроме как ради красивостей нет никакого смысла использовать Array.forEach(), Array.filter(), Array.map() и т.п... просто цикл будет быстрее.

В дополнение, быстрее будет засчёт того, что не будет вызываться функция с достаточно большим количеством аргументов.
Т.е. все нативные методы, всех классов флеша(кроме как Rectangle), работают если не хуже, то точно не лучше развёрнутого руками цикла.

silin 18.11.2009 15:06

>>все нативные методы, всех классов флеша(кроме как Rectangle), работают если не хуже, то точно не лучше развёрнутого руками цикла.

сомнительное утверждение: с чего бы нативная реализация должна быть медленнее скриптовой ?

r_r_f_r 18.11.2009 16:58

Цитата:

Сообщение от silin (Сообщение 866436)
сомнительное утверждение: с чего бы нативная реализация должна быть медленнее скриптовой ?

Боюсь что этот вопрос не ко мне, знаю лишь, что методы и классы(с которыми я сталкивался) работают медленнее собственной реализации, только лишь Rectangle - написан отлично, инициализируется быстрее(раза в два) чем кастомный класс с соответствующими публичными полями, работа методов у него также быстрее.

Могу предположить что Rectangle обёртка настоящего нативного класса, ибо он часто встречается в бинарнике самого swf(вот это конечно сомнительное утверждение), т.е. эдобовцев не заломало нам его дать, а все остальные классы,методы, как мне кажется скриптоложество в собственном соку, во всяком случае тесты говорят об этом.

silin 18.11.2009 17:07

если есть такие наблюдения, то покажи примеры где это действительно так (своя реализация быстрее нативной)
интересно было бы пощупать


Часовой пояс GMT +4, время: 08:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.