Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.05.2007, 14:41
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 1  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
По умолчанию Расстановка обработчиков из цикла

Есть много клипов mc1, mc2 ... mcN
Надо на них повесить обработчик.
Если делать так:
Код:
for (i=1; i<N; i++) {
    this["mc"+i].onPress=function(){
        trace(i)
    }
}
то при нажатии на любой из них будет показываться N, а не их номер (по идее i).
Т.е. флешка сохраняет динамичность кода в обработчике, подставляя туда не конкретное значение, а переменную i, которая по окончании цикла стала равной N.

Проблему можно решить так
Код:
trace(Number(this._name.slice(2)))
Но мне кажется, что можно как-нибудь проще и менее громоздко?

Старый 25.05.2007, 14:55
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Код:
for (i=1; i<N; i++) {
    var mc = this['mc'+i];
    mc.i = i;
    mc.onPress=function(){
        trace(this.i)
    }
}

Старый 25.05.2007, 15:03
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 3  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Действительно, так техничнее
Код:
for (i=1; i<N; i++) {
    this['mc'+i].i = i;
     mc.onPress=function(){
        trace(this.i)
    }
}
Спасибо.

Старый 25.05.2007, 15:07
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Я привел рабочий код, а ты написал уже нерабочий, зачем? Переменная mc создается, чтобы по сто раз не писать this['mc'+i] (что, кстати, в цикле будет медленно работать), не говоря уже о читаемости кода.

Старый 25.05.2007, 15:19
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 5  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Не понял.
В исходнике определение переменной находиться ВНУТРИ цикла.
var mc = this['mc'+i];
Где тут увеличение производительности?
И зачем по сто раз писать
this['mc'+i].i = i; когда в том и суть, что это пишется ОДИН раз?
Читаемость - это субъективно.
Для меня все var и прочие ":" менее читаемы.
Если вместо двух строк используется одна и сразу видно что к чему, то что более читаемо?
Ошибка лишь в пути обработчика:
не mc.onPress, а this['mc'+i].onPress - это и есть по СТО раз?


Последний раз редактировалось chingachgoog; 25.05.2007 в 15:22.
Старый 25.05.2007, 15:26
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ещё раз: твой приведенный код не будет работать. Он должен был быть таким:

Код:
for (i=1; i<N; i++) {
    this['mc'+i].i = i;
    this['mc'+i].onPress=function(){
        trace(this.i)
    }
}
Тут уже дважды будет this['mc'+i], ухудшающее читабельность и производительность (объявление переменной и обращение по ссылке быстрее, чем многократное прямое обращение, не говоря уже о читаемости).

Старый 25.05.2007, 15:31
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 7  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Понял, если будет помимо onPress другие обработчики, то быстрее будет по ссылке.

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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