PDA

Просмотр полной версии : Вызов метода клипа с динамическим именем


AL.exe
07.10.2007, 05:15
Понятно, как вызвать метод мувиклипа, из функции, в котором она описана.

А как вызвать (используя относительный, а не полный путь и без изврата вроде _parent.имя-текущего-клипа) метод клипа с динамическим именем, созданным внутри мувиклипа?

Т.е., к примеру, есть мувиклип _root.fire

В нем объявлена некая функция, которая создает в нем мувиклипы с именем типа "particle"+i

Если использовать this["particle"+i].attachMovie(...), то ничего не произойдет. Замечено, что по статичной ссылке легко обращаться (просто писать без this):
particle18.attachMovie(...) вызывается без проблем. Но ведь нельзя использовать оператор [] для указания динамического имени, если перед ним ничего не ставить... Помогите разобраться, пожалуйста.

Переменные-то просто задавать таким образом:

set("particle"+i+"_yscale",scale_y)

А как вызвать метод?

Так и не разобрался, сделал по-другому.

Но вопрос все равно актуален...

udaaff
07.10.2007, 06:10
Все работает. 17872.

iNils
07.10.2007, 07:16
AL.exe, есть кнопка http://www.flasher.ru/forum/images/russian/style3/buttons/edit.gif, поэтому не надо создавать несколько сообщений подряд, надо исправить последнее в теме.

AL.exe
10.10.2007, 22:19
Видимо, это из раздела плясок с бубном. Ваш код работает - вставляю его в свой ролик - перестает работать :)

iNils
10.10.2007, 22:22
Случайно для ролика не указан AS1 в качестве версии скрипта?

AL.exe
10.10.2007, 23:07
Нет, AS2

udaaff
10.10.2007, 23:26
Выложите исходник.

AL.exe
10.11.2007, 00:11
Да что ж такое... опять с этой проблемой столкнулся. С ума сойду, наверное.

if(this["container"+number].imageLoaded==false){//если картинка еще не была загружена

this.mcLoader = new MovieClipLoader();
this.loadListener = new Object();

loadListener.onLoadComplete = function() { //вызывается при полной загрузке картинки
trace("Картинка "+prefix+number+postfix+" загружена")

trace(this["container"+number]) // ПРОБЛЕМА: возвращает undefined =(
trace(container1) //возвращает полный путь, все ок
trace(_root.switcherMC["container"+number])//возвращает полный путь, все ок
//this["container"+number]._alpha=0
//setInterval(fadeIn,transition_update_interval)
}

mcLoader.addListener(loadListener);
mcLoader.loadClip(prefix+number+postfix, this["container"+number]);
//trace(this["container"+number])
}

Я, наеврное, чего-то не понимаю в относительности объектов... что здесь не так? Подскажите, пожалуйста... опять два часа уьил и понять не могу... может, компилятор побился, а не я тупой? :((

Upd: есть подозрение, что this ссылается тут на сам листенер - выдает [object Object]

Что делать? :(

etc
10.11.2007, 00:54
Ну правильно, ведь this ссылается на loadListener. Необходимо использовать Delegate.

AL.exe
10.11.2007, 00:57
Уже копаюсь в описании к нему... странно, что так сделано. Вернее, странно то, что работает вот это:

trace(container1) //возвращает полный путь, все ок

etc
10.11.2007, 01:21
Потому что происходит поиск в области выше. А если указывать this, то мы ограничиваем область.

AL.exe
10.11.2007, 01:33
А, верно ведь не работает и это:
trace(this.container1)

UPD:

Проблему решил без Deligate:

if(this["container"+number].imageLoaded==false){//если картинка еще не была загружена

this.mcLoader = new MovieClipLoader();
this.loadListener = new Object();

path=this["container"+number]

loadListener.onLoadComplete = function() { //вызывается при полной загрузке картинки
trace("Картинка "+prefix+number+postfix+" загружена")


trace(path) //возвращает требуемый путь

//this["container"+number]._alpha=0

//setInterval(fadeIn,transition_update_interval)
}

mcLoader.addListener(loadListener);
mcLoader.loadClip(prefix+number+postfix, this["container"+number]);
//trace(this["container"+number])
}

etc
10.11.2007, 01:57
О боже. Ну не хотят у нас люди чему-нибудь учиться.

AL.exe
10.11.2007, 02:00
А чем это плохо?

Я добавил лишнюю строку кода вместо использования двух компонентов (eventDispatcher'а и Delegate - я так понял, что последний работает с первым).

etc
10.11.2007, 02:43
Можно было посмотреть в код Delegate.