Просмотр полной версии : Цикл 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);
}
}
Даже если написать так
for (counter = 1; counter <= 3; counter++) {
_root.imageNum["imgBut" + counter].onRelease = function () {
_root.galleryLoader.loadClip (counter + ".jpg", _root.galleryImages);
}
}
counter все-равно равен четырем... :rtfm: :taunt:
Это потому что сначала плеер пройдет цикл и только потом он вернеться к обработчикам событий(это видно в дебагере)...
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);
}
};
}
Не очень красиво, но работает...
Все время 3 выдает.
Т.е. нет ни 1, ни 2, а только 3.
попробуй им всем ставить разные имена и на клик выдавать ответ в зависимости от имени. а имена нужно всегда давать разные
Все верно, после выполнения цикла значение 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);
}
}
Обалдеть!
Спасибо! Работает.
Что-то я в доках ID не видел.
Его и нет. Это новое свойство, которое создается динамически для каждого мувиклипа и сохраняет текущее значение counter.
__etc
А можно как-то без добавления нового свойства? :)
Можно. Но MovieClip — динамический класс. С id вернее было бы.
mc.onRelease = function() {
trace(Number(this._name.substr(6)));
}
Лично я бы сделал подкласс MovieClip с заданным свойством id.
Да-да. Я тоже сейчас задумался над этим. :) Только взвешиваю, можно сказать, трудозатраты. Создавать дин. свойство проще...
Еще можно использовать Proxy/Delegate для этого.
Подскажите, пожалуйста, что значит "я бы сделал подкласс MovieClip с заданным свойством id."
В том смысле, где это копать?
Хочется код писать "красивый", да и научиться новому всегда приятно.
Подскажите, пожалуйста, что значит "я бы сделал подкласс MovieClip с заданным свойством id."
В том смысле, где это копать?
Хочется код писать "красивый", да и научиться новому всегда приятно.
Для этого потребуется переписать весь твой проект на AS2.
Чтобы понять, о чем разговор вам нужно вникнуть в теорию ООП. Есть хорошая книжка Колина Мука про все это.
Быстро не получится. Хотя кто вас знает... :)
Вот название книги:
Основы ActionScript 2.0 (Колин Мук)
и ссылка на блог Kuzen-а - http://www.flashblog.ru/?page_id=4
Там еще есть полезные книжки.
Лично я ООП не применяю, но книжку эту время от времени читаю.
Понятно. Объекто Ориентированное Прграммирование.
Я думал что сейчас я как раз на ас2 =)
Думал что это простоновая версия языка для флеш.
Вот же я деревня.
Я думал что сейчас я как раз на ас2 =)
Это другая идеология. AS2 — это не только типизированный код.
http://www.flash-ripper.com/archives/000304.htm
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.