Форум 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)
-   -   Цикл for и что-то необъяснимое (http://www.flasher.ru/forum/showthread.php?t=92024)

sokiche 13.02.2007 22:22

Цикл for и что-то необъяснимое
 
trace (counter) при клике всегда выдает 4...
почему???
и как заставить выдавать 1 при клике по первому, 2 по второму и т.д.?
Код:

for (counter = 1; counter <= 3; counter++) {
        currentImgBut = "imgBut" + counter;
        _root.imageNum.attachMovie("imgBut", currentImgBut, _root.imageNum.getNextHighestDepth());
        _root.imageNum[currentImgBut].imgNumText.text = counter;
        _root.imageNum[currentImgBut]._x = _root.imageNum[currentImgBut]._width * counter;
        _root.imageNum[currentImgBut].onRelease = function () {
                //_root.galleryLoader.loadClip (counter + ".jpg", _root.galleryImages);
                trace (counter);
        }
}


sokiche 13.02.2007 22:30

Даже если написать так
Код:

for (counter = 1; counter <= 3; counter++) {
        _root.imageNum["imgBut" + counter].onRelease = function () {
                _root.galleryLoader.loadClip (counter + ".jpg", _root.galleryImages);
        }
}

counter все-равно равен четырем... :rtfm: :taunt:

Apeyron 13.02.2007 23:29

Это потому что сначала плеер пройдет цикл и только потом он вернеться к обработчикам событий(это видно в дебагере)...
Код:

for (counter = 1; counter <= 3; counter++) {
        _root.imageNum["imgBut" + counter].onRelease = function () {
for(counter2=1;counter2<=3;counter2++){
                _root.galleryLoader.loadClip (counter2 + ".jpg", _root.galleryImages);
        }
};
}

Не очень красиво, но работает...

sokiche 13.02.2007 23:57

Все время 3 выдает.
Т.е. нет ни 1, ни 2, а только 3.

kmkhi 14.02.2007 00:30

попробуй им всем ставить разные имена и на клик выдавать ответ в зависимости от имени. а имена нужно всегда давать разные

etc 14.02.2007 00:57

Все верно, после выполнения цикла значение counter будет равно четырем. Именно эту переменную вы трейсите. Нужно делать так:

Код:

for (counter = 1; counter <= 3; counter++) {
        currentImgBut = "imgBut" + counter;
        var mc = _root.imageNum.attachMovie("imgBut", currentImgBut, _root.imageNum.getNextHighestDepth());
        mc.imgNumText.text = counter;
        mc._x = _root.imageNum[currentImgBut]._width * counter;
        mc.id = i;
        mc.onRelease = function () {
                trace (this.id);
        }
}


sokiche 14.02.2007 01:22

Обалдеть!
Спасибо! Работает.

Что-то я в доках ID не видел.

pkfun 14.02.2007 01:38

Его и нет. Это новое свойство, которое создается динамически для каждого мувиклипа и сохраняет текущее значение counter.

__etc
А можно как-то без добавления нового свойства? :)

etc 14.02.2007 01:49

Можно. Но MovieClip — динамический класс. С id вернее было бы.
Код:

mc.onRelease = function() {
    trace(Number(this._name.substr(6)));
}

Лично я бы сделал подкласс MovieClip с заданным свойством id.

pkfun 14.02.2007 01:55

Да-да. Я тоже сейчас задумался над этим. :) Только взвешиваю, можно сказать, трудозатраты. Создавать дин. свойство проще...


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

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