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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.03.2006, 05:17
Sancho.rancho вне форума Посмотреть профиль Отправить личное сообщение для Sancho.rancho Найти все сообщения от Sancho.rancho
  № 1  
Ответить с цитированием
Sancho.rancho
 
Аватар для Sancho.rancho

Регистрация: Dec 2005
Сообщений: 24
Attention Как через цикл задать группе клипов каждому свою функцию

Такая вот проблема, может кому не сложно...
Как через цикл задать группе клипов каждому свою функцию (запускающуюся по 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));
  		};
  	}
}
Но чето не выходит
Обычно все тупики стараюсь сам решать, но здесь че-то реально затупил, так, что если кто сталкивался с такой проблемой, буду признателен за помошь!


Последний раз редактировалось Sancho.rancho; 31.03.2006 в 05:23.
Старый 31.03.2006, 06:55
666 вне форума Посмотреть профиль Найти все сообщения от 666
  № 2  
Ответить с цитированием
666
Banned
[+5 29.08.07]
[+2 22.08.07]

Регистрация: Aug 2001
Сообщений: 503
Ну и синтаксис... eval, this, set, да ещё и определение типов по AS 2.0 ...

Старый 31.03.2006, 12:06
amorgin вне форума Посмотреть профиль Отправить личное сообщение для amorgin Найти все сообщения от amorgin
  № 3  
Ответить с цитированием
amorgin

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

Старый 31.03.2006, 12:13
motor4ik вне форума Посмотреть профиль Отправить личное сообщение для motor4ik Посетить домашнюю страницу motor4ik Найти все сообщения от motor4ik
  № 4  
Ответить с цитированием
motor4ik
 
Аватар для motor4ik

Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
не совсем понял что не получается, но я делаю вот так:

Код:
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:27.
Старый 31.03.2006, 12:15
motor4ik вне форума Посмотреть профиль Отправить личное сообщение для motor4ik Посетить домашнюю страницу motor4ik Найти все сообщения от motor4ik
  № 5  
Ответить с цитированием
motor4ik
 
Аватар для motor4ik

Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
хотя по понятным причинам в этом коде только суть, пути к переменным итд нужно прописывать правильно самому!

Старый 31.03.2006, 12:16
motor4ik вне форума Посмотреть профиль Отправить личное сообщение для motor4ik Посетить домашнюю страницу motor4ik Найти все сообщения от motor4ik
  № 6  
Ответить с цитированием
motor4ik
 
Аватар для motor4ik

Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
массив не нужно передавать в функцию, т.к. потом функция обработчика события его просто напросто не найдет.

Старый 31.03.2006, 12:25
KPaul вне форума Посмотреть профиль Отправить личное сообщение для KPaul Найти все сообщения от KPaul
  № 7  
Ответить с цитированием
KPaul
 
Аватар для KPaul

Регистрация: Nov 2005
Сообщений: 221
Если я правильно понимаю, то 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);
	}

Старый 31.03.2006, 12:26
motor4ik вне форума Посмотреть профиль Отправить личное сообщение для motor4ik Посетить домашнюю страницу motor4ik Найти все сообщения от motor4ik
  № 8  
Ответить с цитированием
motor4ik
 
Аватар для motor4ik

Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
да кстати...про это тоже .onPress

Старый 31.03.2006, 13:17
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 9  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
Код будет работать не верно, из-за этого участка в коде
Цитата:
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));
};
}
}
__________________
...

Старый 31.03.2006, 17:49
Sancho.rancho вне форума Посмотреть профиль Отправить личное сообщение для Sancho.rancho Найти все сообщения от Sancho.rancho
  № 10  
Ответить с цитированием
Sancho.rancho
 
Аватар для Sancho.rancho

Регистрация: Dec 2005
Сообщений: 24
Всем, кто откликнулся - Оогромное спасибо!
При создании переменной 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, время: 19:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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