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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.01.2010, 22:25
Cholito вне форума Посмотреть профиль Отправить личное сообщение для Cholito Найти все сообщения от Cholito
  № 1  
Ответить с цитированием
Cholito

Регистрация: Jan 2010
Адрес: Polska
Сообщений: 5
По умолчанию массив MovieClip из библиотеки, EventListener обрабатывает только последний мувик

Приветствую всех!

Бьюсь над проблемой, но уже просто не знаю, что можно сделать. А дело в следующем:
Беру мувик из библиотеки, создаю его экземпляр в цикле, добавляю его в массив и на екран следующим образом:

Код AS3:
var classBtArr:Array = new Array(10);
 
for (var k:int = 0; k<10; k++){
	var myClassBt:MovieClip = new setClass();
		myClassBt.y = 30*k;
                myClassBt.name = "setClassBt"+k;
                classBtArr.push(myClassBt);
		myClassBt.addEventListener(MouseEvent.CLICK,onSetClass);
		addChild(myClassBt); // можно написать addChild(classBtArr[k]); - результат тот же
 
		function onSetClass(e:Event): void{
                        trace(myClassBt.name);  // выводит только: setClassBt9
			if (myClassBt.currentFrame!=11){
				myClassBt.gotoAndStop(11);  // тут на 11-й кадр переходит только последний добавленный мувик, хотя нажимаю на другие
				}else{
					myClassBt.gotoAndStop(1+Math.floor(myClassBt.mouseX/20));
					}
			}
                }
Событие Click срабатывает при нажатии на любой из мувиков, но по отношению только к последнему из них. А нужно, чтобы понимало, какой мувик вызвал событие, а этого он ну никак делать не хочет...

Помогите, пожалуйста. Очень нужно, но не могу с этим разобраться никак, и в интернете ничего подходящего не нахожу.

Старый 21.01.2010, 22:34
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Код AS3:
trace(e.target.name);
__________________
тонкий тролль, осеянный благодатью

Старый 22.01.2010, 01:05
Cholito вне форума Посмотреть профиль Отправить личное сообщение для Cholito Найти все сообщения от Cholito
  № 3  
Ответить с цитированием
Cholito

Регистрация: Jan 2010
Адрес: Polska
Сообщений: 5
По умолчанию не помогло

Да, для команды

trace(e.target.name);

даёт результаты типа:

instance136
instance162
instance214
instance32
...

Но для

trace(e.target.y);

всё время выводит 0. Хотя мувики имеют разные координаты, выстроены в столбик. И на 11й кадр они тоже не переходят. Такой вариант не спасает ситуацию.

Старый 22.01.2010, 02:08
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 4  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Переход на 11 кадр нужно тоже писать для e.target
По поводу y=0 - что у вас внутри setClass? Туда случайно не напихано еще чего-нибудь? Попробуйте ему прописать mouseChildren = false
__________________
тонкий тролль, осеянный благодатью

Старый 22.01.2010, 02:23
Cholito вне форума Посмотреть профиль Отправить личное сообщение для Cholito Найти все сообщения от Cholito
  № 5  
Ответить с цитированием
Cholito

Регистрация: Jan 2010
Адрес: Polska
Сообщений: 5
По умолчанию :) уже работает!

А оказывается, нужно было написать

Код AS3:
trace(e.currentTarget.y);


Вот и все дела.
Код работает в следующем виде:


Код AS3:
var classBtArr:Array = [];
 
 
for (var k:int = 0; k<10; k++){
		var myClassBt:MovieClip = new setClass();
		myClassBt.x = 0;
		myClassBt.y = 30*k;
		myClassBt.instanceName = "setClassBt"+k;
		myClassBt.addEventListener(MouseEvent.CLICK,onSetClass);
		classBtArr[k]=myClassBt;
		addChild(classBtArr[k]);
 
		function onSetClass(e:Event): void{
			trace(e.currentTarget.y);
			if (e.currentTarget.currentFrame!=11){
				e.currentTarget.gotoAndStop(11);
				}else{
					e.currentTarget.gotoAndStop(1+Math.floor(e.currentTarget.mouseX/20));
					trace(e.currentTarget.currentFrame-1);
					}
			}
		myClassBt.removeMovieClip;
 
	}
Обидно только, что столько времени убито на то, чтобы найти такую мелкую причину.
Поэтому, кого интересует, как бороться с добавленными из библиотеки кнопками/мувиками, пользуйтесь на здоровье этим кодом

Добавлено через 12 минут
GAIKER, спасибо за сотрудничество

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

Теги
addChild , addeventlistener , array , movieclip , библиотека
Опции темы
Опции просмотра

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

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


 


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


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