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

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

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

Регистрация: Aug 2008
Сообщений: 40
По умолчанию Не могу разобраться сам. Слишком много событий

Есть такой код:

Код:
var item:Array = new Array;// создаём массив для объектов
var zzz = aaa;
var sss = aaa;
var j:String= "item";// задаём основу для имени объектов
var i=0;// Создаём счётчик объектов
stage.addEventListener(MouseEvent.MOUSE_DOWN,addmc);// Добавляем прослушку мыши 

function addmc(event:MouseEvent):void {
	i=i+1;// Увеличиваем счётчик объектов
	j=j+i;// Добавляем к имени объекта счётчик
	var z:aaa = new aaa;// Создаём образец МувиКлипа
	z.name =j;// Даём ему уникальное имя
	z.addEventListener(MouseEvent.MOUSE_DOWN,addmc2);
	z.addEventListener(MouseEvent.MOUSE_UP,addmc3);
	z.index = i;
	//trace(z.index);
	z.az.text=z.name;
	item[i] = z;// Помещаем новый образец в массив (контейнер)
	addChild(z);// Помещаем образец на сцену
	z.x = stage.mouseX;// Координата Х образца
	z.y = stage.mouseY;// Координата У образца
	j="item";//Обнуляем имя следующего образца чтобы потом добавить счётчик

}

function addmc2(event:MouseEvent):void { // Событие при зажатии кнопки мыши
	zzz = event.target;
	sss = item[zzz.index];
	if (sss.name.substr(0,4) == "item") {
		// При наведении курсора с нажатой кнопкой
		sss.az.text =zzz.name;
		//trace(sss.index);
		sss.startDrag();
		
		
	}
}

function addmc3(event:MouseEvent):void { // Событие при отпускании кнопки мыши
    zzz = event.target;
	if (zzz.name.substr(0,4) == "item") {
	sss = item[zzz.index];
	sss.stopDrag();
	}
}
Когда я подписываю stage на событие MOUSE_DOWN, я пишу код, который при этом событии выполняется и который создаёт новый образец мувиклипа на экране.
И каждому созданному мувику я приписываю такой же слушатель, но свой, который отвечает за drag & drop.

НО. Когда я хочу сделать drag & drop и делаю MOUSE_DOWN на этом мувиклипе, событие попадает и на stage , из-за чего я создаю ещё один лишний мувиклип.

Пока всё на догадках, но я думаю, нужно как-то приостанавливать события на время drag & drop.

Что-то никак не пойму, что я делаю неправильно.

Старый 17.11.2008, 14:09
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 2  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Хотя код ужасен, как вариант
Код AS3:
stage.addEventListener(MouseEvent.CLICK,addmc);

Старый 17.11.2008, 14:57
mad_god вне форума Посмотреть профиль Отправить личное сообщение для mad_god Найти все сообщения от mad_god
  № 3  
Ответить с цитированием
mad_god

Регистрация: Aug 2008
Сообщений: 40
это из-за того что Click - не генерит MOUSE_DOWN ?

а не подскажете ещё, как правильно написать в конце, там где у меня получение ссылки на мувиклип.
Дело в чём: событие-то возникает, но пока я начинаю получать ссылку, событие возникает ещё несколько раз (по-моему), поэтому у меня там проверка, содержит ли имя объекта нужный текст.

Но вот в чём сложность: на объекте есть также текст, который иногда "хватает" событие и тогда, конечно же вылетает ошибка.

Спасибо за ответ

UPD
Оказалось, MOUSE_UP генерит CLICK


Последний раз редактировалось mad_god; 17.11.2008 в 15:03.
Старый 17.11.2008, 15:03
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 4  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Код AS3:
z.mouseChildren = false;

Старый 17.11.2008, 15:34
mad_god вне форума Посмотреть профиль Отправить личное сообщение для mad_god Найти все сообщения от mad_god
  № 5  
Ответить с цитированием
mad_god

Регистрация: Aug 2008
Сообщений: 40
Да, так лучше. Но всё равно, при отпускании кнопки мыши, stege получает CLICK и создаёт лишний мувик.

Может, связать как-то событие и флаг "начат драг енд дроп" ?

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

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Код AS3:
function addmc(event:MouseEvent):void 
{
    if (event.target == stage)
    {
         ....
    }
}

Старый 17.11.2008, 16:10
mad_god вне форума Посмотреть профиль Отправить личное сообщение для mad_god Найти все сообщения от mad_god
  № 7  
Ответить с цитированием
mad_god

Регистрация: Aug 2008
Сообщений: 40
Огромное спасибо.

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

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

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


 


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


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