Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Цикл: неправильный счет (http://www.flasher.ru/forum/showthread.php?t=108884)

TanaTiX 02.03.2008 22:01

Цикл: неправильный счет
 
Сабж.
Код:

for (n = 2; n <= 6; n++){
    _root.top_menu["top_b" + n].onPress = function(){
          trace(n);
    }
}

При нажатии на соответствующую кнопку выдает 7. Т.е. с самого начала ролика происходит счет до 6, а потом при нажатии плюсуется еще 1 и выносится в трэйс.
Что не правильно(желательно с объяснениями) в этом коде и как это исправить?

iNils 02.03.2008 22:12

1. Персонально вам говорю, перед вставкой код, форматируйте его. Собюлюдайте табуляцию, ставте между операндами пробелы и тп. Это упрощает чтения кода глазами, а у вас каша.
2. Избегайте писать конструкции n <= 6, пишите лучше n < 7
3.
Код:

for (n = 2; n < 7; n++) {
        _root.top_menu["top_b" + n].n = n;
        _root.top_menu["top_b" + n].onPress = function () {
                trace (this.n);
        };
}


udaaff 02.03.2008 22:14

Код:

for (n = 2; n < 7; n++) {
        var top_b = _root.top_menu["top_b" + n];
        top_b.n = n;
        top_b.onPress = function() {
                trace(this.n);
        }
}


TanaTiX 02.03.2008 22:21

Спасибо, работает.
Цитата:

Сообщение от iNils
1. Персонально вам говорю, перед вставкой код, форматируйте его. Собюлюдайте табуляцию, ставте между операндами пробелы и тп.

ок, учту
Цитата:

Сообщение от iNils
2. Избегайте писать конструкции n <= 6, пишите лучше n < 7

Почему?
И если не сложно, можно объяснить 2ю строчку кода?

Mr. Fixit 02.03.2008 22:33

MovieClip - динамический клас. И ты просто создаешь ему свойство, в даном случае, n и присваиваешь текущее числовое значение.

iNils 02.03.2008 22:38

Цитата:

Почему?
Простая оптимизация, <= требует чуть больше операций (на уровне байт кода), чем <.

Цитата:

И если не сложно, можно объяснить 2ю строчку кода?
В строки trace(n); n это имя переменной изменяемое циклом, а не ее значение.
Поэтому втроая строчка создает локальную переменную внутри кнопки и присваивает ее текущие значение n цикла.
То есть у вас на самом деле два n: локальное в кнопке и у предка.

TanaTiX 02.03.2008 23:58

У меня внутри мувика при нажатии должна проигрываться анимация. Я по аналогии внутри цикла ввожу:
Код:

top_b.menu_title_mc.gotoAndPlay(21);
Но тем не менее ничего не проигрывается, т.е. в данному случае top_b опять воспринимается как глобальная переменная, а не как свойство мувика. Что нужно исправить?

udaaff 03.03.2008 00:04

Код:

this.menu_title_mc.gotoAndPlay(21);

TanaTiX 03.03.2008 00:14

udaaff, я это пробовал, но не работает. Если написать тот код, который я написал вначале, то срабатывает не на нажимаемой кнопке, а только на последней из списка однотипных

udaaff 03.03.2008 00:24

Должен срабатывать...
Код:

for (n = 2; n < 7; n++) {
        var top_b = _root.top_menu["top_b" + n];
        top_b.n = n;
        top_b.onPress = function() {
                trace(this.n);
                this.menu_title_mc.gotoAndPlay(21);
        }
}



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

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