Форум 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

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

lowka 14.02.2007 01:58

Еще можно использовать Proxy/Delegate для этого.

sokiche 14.02.2007 02:03

Подскажите, пожалуйста, что значит "я бы сделал подкласс MovieClip с заданным свойством id."

В том смысле, где это копать?
Хочется код писать "красивый", да и научиться новому всегда приятно.

etc 14.02.2007 02:07

Цитата:

Сообщение от sokiche
Подскажите, пожалуйста, что значит "я бы сделал подкласс MovieClip с заданным свойством id."

В том смысле, где это копать?
Хочется код писать "красивый", да и научиться новому всегда приятно.

Для этого потребуется переписать весь твой проект на AS2.

pkfun 14.02.2007 02:07

Чтобы понять, о чем разговор вам нужно вникнуть в теорию ООП. Есть хорошая книжка Колина Мука про все это.
Быстро не получится. Хотя кто вас знает... :)

Вот название книги:
Основы ActionScript 2.0 (Колин Мук)
и ссылка на блог Kuzen-а - http://www.flashblog.ru/?page_id=4
Там еще есть полезные книжки.

Лично я ООП не применяю, но книжку эту время от времени читаю.

sokiche 14.02.2007 02:11

Понятно. Объекто Ориентированное Прграммирование.

Я думал что сейчас я как раз на ас2 =)
Думал что это простоновая версия языка для флеш.

Вот же я деревня.

etc 14.02.2007 02:50

Цитата:

Сообщение от sokiche
Я думал что сейчас я как раз на ас2 =)

Это другая идеология. AS2 — это не только типизированный код.

http://www.flash-ripper.com/archives/000304.htm


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

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