PDA

Просмотр полной версии : Event Caller


Core_2_Duo
29.03.2012, 02:19
Доброго времени суток.
Есть вопрос - как из события обратиться к тому мувиклипу, который его вызвал?
Пример:


for (var j=0; j<xml.mob.length(); j++) {
mob[j].timer.addEventListener(TimerEvent.TIMER, function (e:TimerEvent) {
/* И вот здесь надо обратиться к этому mob[j] */
});
}


Прошу вашей помощи)

Zebestov
29.03.2012, 02:24
Срочно сменить стиль программирования, почитать книжки что ли!

Core_2_Duo
29.03.2012, 02:30
Преотличнейший совет. Хотелось бы нагрубить, но не буду.
Это лишь маленький кусок кода, выполняемый в этом цикле. Ах да, забыл несколько строк после начала цикла.

for (var j=0; j<xml.mob.length(); j++) {
mob[j]=new Object; /* вот эти */
mob[j].timer=new Timer(50, 50); /* вот эти */
mob[j].timer.start(); /* вот эти */
mob[j].timer.addEventListener(TimerEvent.TIMER, function (e:TimerEvent) {
/* И вот здесь надо обратиться к этому mob[j] */
});
}

Но к делу это имеет мало отношения

Vishapakahr
29.03.2012, 02:39
e.target ... , те кусочки что вы написали просто кашмар ))

Wolsh
29.03.2012, 02:49
"Event Caller" здесь new Timer(50, 50).
Обратиться к нему можно через свойство Event#target или Event#currentTarget.
Объект mob[j], у которого завели динамическое свойство и передали в него ссылку на new Timer(50, 50), никак из таймера а тем более события недоступен: таймер вовсе никак не обязан знать, какие объекты хранят на него ссылки. Тем более что этих объектов могут быть тысячи.

Core_2_Duo
29.03.2012, 02:53
Хм, спасибо, это печально.
Интересно, что такого кошмарного в коде?
Поясните уж, если пишите

Vishapakahr
29.03.2012, 03:12
Ну , зачем регистрировать столька таймеров ? зачем прикреплять к каждому обьекту свой таймер из внешной ссылки ? другое дело если есть класс , внутри него регистрируешь .. . Дело в производительности приложения , думаю в вашем коде он просто виснеть будет

wvxvw
29.03.2012, 04:13
for (var j=0; j<xml.mob.length(); j++) {
// var j=0 - не объявлен тип переменной.
// var j=0 - инфиксные операторы принято отделять пробелами за исключением обозначений типов.
// j никогда не будет больше int.MAX_VALUE, но так, как вы его объявили, он будет типа Number
// при этом будет выполнять более простые операции для целых чисел более сложным способом
// как для чисел с плавающей запятой.
// j<xml.mob.length() - см. инфиксные операторы.
// j<xml.mob.length() - это условие будет рассчитано каждый виток цикла. Оно само по себе
// представляет вложенный цикл т.е. цикл по всем детям xml с выборкой, потом цикл по
// всем детям mob с выборкой.
mob[j]=new Object; /* вот эти */
// см. инфиксные операторы.
// mob судя по всему типа XMLList, поэтому код приведенный выше равносилен:
// mob[j] = XML("");
// что само по себе бессмысленно.
// new Object; - использует неидиоматическую запись вызова конструктора
// нужно, как минимум, new Object();
// более того, существует короткая запись: {}, которая, кроме всего прочего
// занимает меньше памяти (по случайному стечению обстоятельств).
// Но хуже всего то, что использование динамического объекта в этом месте ничем не
// обосновано. Нужно было создавать объект со статическим типом. Динамические
// объекты нужно создавать только тогда, когда не-динамические создавать не возможно.
mob[j].timer=new Timer(50, 50); /* вот эти */
// вы повторяете одну и ту же операцию доступа к элементу по индексу. Нормальным
// подходом было бы закешировать созданный вами ранее объект в переменную.
// создавать новый Timer каждый раз - непозоволительное расточительство. Время всегда одно,
// и от количества хронометров не изменится.
mob[j].timer.start(); /* вот эти */
// см. кеширование.
// кроме всего, начав выражение с динамического доступа, и не приведя тип к какому-нибудь
// статическому типу вы продолжаете пользоваться механизмом поиска свойств по имени
// вместо того, чтобы позволить компилятору найти нужное свойство еще на этапе компиляции.
mob[j].timer.addEventListener(TimerEvent.TIMER, function (e:TimerEvent) {
// см. про отсутсвие типизации.
// e:TimerEvent - очень короткое имя переменной. слово event не достаточно длинное,
// для того, чтобы его сокращать. Однобуквенные переменные не пройдут никакой код-ревью.
// кроме того, что вы в цикле понасоздавали таймеров, вы теперь еще понасоздавали
// функций, в то время, как достаточно было бы только одной.
// у функции не указан возвращаемый тип. - это предупреждение компилятора
// т.е. скомпилируется, но в большинстве компаний которые производят продукцию
// сколь-нибудь серьезного уровня с использованием AS3 такой код не разрешат
// положить в репозитори.
/* И вот здесь надо обратиться к этому mob[j] */
// если бы вы исправили все остальное, ну или хотя бы принципиальную
// часть, то этот вопрос у вас бы не возник, т.как проблема
// решилась бы сама по себе.
});
}

Nooob
29.03.2012, 04:43
+ анонимная функция

Silicium
29.03.2012, 10:49
итого резюме:
Срочно сменить стиль программирования, почитать книжки что ли!

ЗЫ: главное поймите, здесь каждый желает помочь. Обижаться не имеет смысла (уж тем более грубить). Имеет смысл прислушаться. Всякий раз.

anmelegov
29.03.2012, 10:55
я порой специально пишу фигню чтобы узнать что-нибуть новенькое =)

Wolsh
29.03.2012, 11:07
Других хоть не учите этому, валидола не напасешься. Я до сих пор под впечатлением от ваших мыслящих кнопок, самостоятельно ползающих по стейджу, изменяясь в размере....

Yahen
29.03.2012, 12:08
Других хоть не учите этому, валидола не напасешься. Я до сих пор под впечатлением от ваших мыслящих кнопок, самостоятельно ползающих по стейджу, изменяясь в размере....
"В бане шторами не вытираться"
А это мысль!
Забабахать что-ли игрушку, Шутер офисный. Рабочее название - "Восстание контролов".
Краткий сценарий:
Контролам на окнах надоело быть послушными исполнителями чужой воли. Они теперь сами нажимаются, переползают меняют размер цвет и назначение. В компьютере начинается хаос. И лишь отважный эникейщик Vasiliy Pupkin с его многозарядным obrezom способем восстановить порядок.

Core_2_Duo
29.03.2012, 12:40
итого резюме:


ЗЫ: главное поймите, здесь каждый желает помочь. Обижаться не имеет смысла (уж тем более грубить). Имеет смысл прислушаться. Всякий раз.

Скорей всего, это так. Но сообщение

Срочно сменить стиль программирования, почитать книжки что ли!

без каких-либо объяснений я вряд ли могу считать помощью. Спасибо Wolsh за ответ на поставленный вопрос и wvxvw за замечания, я их учту и переделаю данный код.

Aquahawk
29.03.2012, 13:09
wvxvw прорвало, понимаю :). Периодически тоже на подобный код хочется написать что-нибудь подобное.