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

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

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

Регистрация: Aug 2006
Сообщений: 8
По умолчанию Событие onPress и динамический клип

Привет всем.

Есть скрипт, который после второго клика пользователя по мувику "field" рисует стрелку по двум координатам. После создания пытаюсь определить стрелке событие onPress, но ничего не получается. Подскажите, как можно отследить это событие.

Actions для клипа "field":

Код AS1/AS2:
on (press) {
	// рисование стрелки
	function Arrow(objName:String, x1:Number, y1:Number, x2:Number, y2:Number, color, alpha) {
		if(color == undefined) color = 0x000000;
		if(alpha == undefined) alpha = 100;
 
		var mc:MovieClip = _root.field.createEmptyMovieClip( objName, _root.field.getNextHighestDepth());
 
		mc.lineStyle(2, 0, 100);
		mc.moveTo(x1, y1);
		mc.lineTo(x2, y2);
 
		// рисуем стрелку на конце линии
		var arrow:MovieClip = mc.attachMovie( "arrowHead", "arrowHead", 0 );
 
		arrow._x = x2;
		arrow._y = y2;
		arrow._rotation = Math.atan2(y2 - y1, x2 - x1 ) * ( 180 / Math.PI );
 
		// пытаемся определить функцию для события клика по стрелке
		// этот вариант не работает
		mc.onPress = function():Void {
			trace(1);
		}
 
		// этот тоже
		var listener:Object = {};
		listener.onPress = function():Void {
			trace(1);
		}
		mc.addListener(listener);
 
		return mc;
	}
 
	/* Если включен режим рисования стрелок */
	if(_root.drawMode) {
		// первый клик
		if(_root.c.length == 0) {
			// запоминаем координаты
			_root.c[0] = [_root.field._xmouse, _root.field._ymouse];
		}
		// второй клик
		else if(_root.c.length == 1) {
			// запоминаем координаты
			_root.c[1] = [_root.field._xmouse, _root.field._ymouse];
 
			// массив со стрелками
			var ArrowName:String = "arrow" + _root.arrows.length;
			_root.arrows.push(ArrowName);
 
			// рисуем стрелку			
			_root.arrows[ArrowName] = Arrow(ArrowName, _root.c[0][0], _root.c[0][1], _root.c[1][0], _root.c[1][1]);
 
			// очищаем координаты
			_root.c = new Array();
 
			// функция отключает режим рисования
			_root.toogleDrawMode();
		}
	}
}
 
// _root.c - массив с координатами стрелки
Рисование стрелки работает на ура, а вот хочется еще добавить возможность ее редактирования. Заранее благодарю.

Старый 06.03.2009, 09:13
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Код AS1/AS2:
// этот тоже
var listener:Object = {};
listener.onPress = function():Void {
	trace(1);
}
mc.addListener(listener);
Это в вашем контексте точно не будет работать.
А это работает.
Код:
mc.onPress = function():Void {
	trace(1);
}
Вообще, код рабочий. Проверьте вызовы, объекты, где-то у вас засел жучок.

Старый 06.03.2009, 22:29
Kasap вне форума Посмотреть профиль Отправить личное сообщение для Kasap Найти все сообщения от Kasap
  № 3  
Ответить с цитированием
Kasap

Регистрация: Aug 2006
Сообщений: 8
Я в тупике. Уже себе мозг вывихнул
Сам понимаю, что должно работать, но ошибки найти не могу. Дайте намёк, где и что искать. К посту прилагаю исходник.
Вложения
Тип файла: zip drawArrows.zip (6.5 Кб, 41 просмотров)

Старый 07.03.2009, 00:15
Kasap вне форума Посмотреть профиль Отправить личное сообщение для Kasap Найти все сообщения от Kasap
  № 4  
Ответить с цитированием
Kasap

Регистрация: Aug 2006
Сообщений: 8
В ходе изучения обнаружил вот какую вещь.
Стрелки рисуются на клипе field, у которого уже назначено событие onPress. Это событие перекрывает событие стрелки.

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

Регистрация: Nov 2008
Сообщений: 528
Цитата:
Сообщение от Kasap Посмотреть сообщение
В ходе изучения обнаружил вот какую вещь.
Стрелки рисуются на клипе field, у которого уже назначено событие onPress. Это событие перекрывает событие стрелки.
Есть такое дело. Даже более того. Если родительскому клипу назначить любой из onPress, onRelease и подобных, то все вложенные в него клипы перестают реагировать вообще на все эти обработчики. То есть на практике у меня получилос, что не просто перекрывается какое-то одно событие, а родительский клип хватает все мышиные события на себя и ничего не оставляет вложенным клипам.

Лично я решал эту проблему через hitTest. Кстати, любопытно, есть ли какой-то другой способ?

Старый 07.03.2009, 01:21
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 6  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от Stargazer Посмотреть сообщение
Лично я решал эту проблему через hitTest. Кстати, любопытно, есть ли какой-то другой способ?
Есть. это основной головной геморой для АС2, успешно решенный с приходом АС3, нормальных эвентов и баблинга.
Для АС2 есть только костыли и чОткое планирование классов и экземляров.
__________________
Отряд Котовскага

Старый 07.03.2009, 01:35
Kasap вне форума Посмотреть профиль Отправить личное сообщение для Kasap Найти все сообщения от Kasap
  № 7  
Ответить с цитированием
Kasap

Регистрация: Aug 2006
Сообщений: 8
Неохота переписывать все на AS3, к изучению которого я еще не приступал. Я тут еще обнаружил, что событие onMouseMove работает глобально и не может быть назначено для конкретного мувика. Вообщем, укладываюсь спать удрученным.
Попробую повозиться с hitTest (спасибо Stargazer). Если не выйдет, буду мурыжить AS3.
Всем спасибо.

Старый 07.03.2009, 02:24
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 8  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от Kasap Посмотреть сообщение
Неохота переписывать все на AS3, к изучению которого я еще не приступал. Я тут еще обнаружил, что событие onMouseMove работает глобально и не может быть назначено для конкретного мувика. Вообщем, укладываюсь спать удрученным.
Попробую повозиться с hitTest (спасибо Stargazer). Если не выйдет, буду мурыжить AS3.
Всем спасибо.
Мне бы твои проблемы. .. неохота видите-ли )
Я хотел, и добился у начальства разрешения переписать 15 000 строчек на as1 в классы as2 (22 000) а затем в as3 (..пока неизвестно.)
Уломать себя я думаю проще.
__________________
Отряд Котовскага

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

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

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


 


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


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