Форум 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)
-   -   Как через цикл задать группе клипов каждому свою функцию (http://www.flasher.ru/forum/showthread.php?t=77732)

Sancho.rancho 31.03.2006 05:17

Как через цикл задать группе клипов каждому свою функцию
 
Такая вот проблема, может кому не сложно... ;)
Как через цикл задать группе клипов каждому свою функцию (запускающуюся по mouseDown), пробую так:
Код:

function SongsButtons(songs_scr:Array, max_songs:Number):Void {         
        for (i=0; i<max_songs; i++) {
                set("curent_song"+i, songs_scr[i]);
                  this["song_title_mc"+i].onMouseDown = function(){
                          media_holder.unloadMovie();
                          media_holder.loadMovie(eval("curent_song"+i));
                  };
          }
}

Но чето не выходит :(
Обычно все тупики стараюсь сам решать, но здесь че-то реально затупил, так, что если кто сталкивался с такой проблемой, буду признателен за помошь!

666 31.03.2006 06:55

Ну и синтаксис... eval, this, set, да ещё и определение типов по AS 2.0 ...

amorgin 31.03.2006 12:06

походу в AS через цикл нельзя управлять обработкой событий,у меня такая же проблема и пришлось на каждый мувиклип отдельный onRollOver вешать.Мож кто по умнее найдётся и подскажет

motor4ik 31.03.2006 12:13

не совсем понял что не получается, но я делаю вот так:

Код:

function SongsButtons(songs_scr:Array, max_songs:Number):Void {         
        for (i=0; i<max_songs; i++) {
                        this["song_title_mc"+i].p=i;
                  this["song_title_mc"+i].onPress = function(){
                  media_holder.unloadMovie();
                  media_holder.loadMovie(songs_scr[this.p]+this.p);
                  };
          }
}


motor4ik 31.03.2006 12:15

хотя по понятным причинам в этом коде только суть, пути к переменным итд нужно прописывать правильно самому!

motor4ik 31.03.2006 12:16

массив не нужно передавать в функцию, т.к. потом функция обработчика события его просто напросто не найдет.

KPaul 31.03.2006 12:25

Если я правильно понимаю, то onMousDown это глобальное событие класса Mouse, на которое подписаны по умолчанию все клипы. В данном случае мы получаем срабатывание всех созданных обработчиков одновременно при клике где угодно. Если нужна для каждого свой обработчик используй onPress или onRelease.
Сейчас у тебя загружаться будет всегда "curent_song"+max_songs. Можно сделать так:
Код:

        this["song_title_mc"+i].i = i;
        this["song_title_mc"+i].onPress = function(){
                trace(this.i);
        }


motor4ik 31.03.2006 12:26

да кстати...про это тоже .onPress

Александр Мостовой 31.03.2006 13:17

Код будет работать не верно, из-за этого участка в коде
Цитата:

this["song_title_mc"+i].onMouseDown = function(){
media_holder.unloadMovie();
media_holder.loadMovie(eval("curent_song"+i));
};
Цитата:

media_holder.loadMovie(eval("curent_song"+i));
Все дело в переменной i
При событии мыши метод будет уже виден не внутри цикла "for (i=0; i<max_songs; i++) { ", а из области видимости мувиклипа на котором произошло событие, где переменной i либо не существует, либо есть ее тезка, с неизвесно каким значением.

Выход создавать в каждом клипе свойство ID или что-то в этом духе которое и использывать для загрузки мувика.

function SongsButtons(songs_scr:Array, max_songs:Number):Void {
for (i=0; i<max_songs; i++) {
set("curent_song"+i, songs_scr[i]);
this["song_title_mc"+i].ID_num = i;
this["song_title_mc"+i].onMouseDown = function(){
media_holder.unloadMovie();
media_holder.loadMovie(eval("curent_song"+ID_num));
};
}
}

Sancho.rancho 31.03.2006 17:49

Всем, кто откликнулся - Оогромное спасибо!
При создании переменной songs_scr убрал var (Она у меня в другой функции создавалась)
В результате заработал следующий код:
Код:

function SongsButtons(max_songs:Number):Void {
          for (i=0; i<max_songs; i++) {
                  this["song_title_mc"+i].id_num = i;
                  this["song_title_mc"+i].onPress = function(){
                  media_holder.unloadMovie();
                  media_holder.loadMovie(songs_scr[this.id_num]);
                  };
          }
}



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

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