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

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

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

Регистрация: Sep 2012
Сообщений: 1
Attention "Сквозное" событие

Добрый день, я изучаю AS3 совсем недавно и столкнулся со следующей проблемой:
реализовал некий класс, который представляет собой сущность Toolbar'a. Содержит он, соответственно, Tool'ы, так же описанные мной. Объект класса Tool - простой BitmapAsset, натянутый на Sprite, и отлавливающий несколько событий для подсветки. При нажатии на Tool, объект ToolBar'a обрабатывает следующее
Код AS3:
 
mDragTool = new Tool(tmpClass); //создаем новый объект Tool, в параметр передан Embed-класс с изображением
addChild(mDragTool); //добавляем на сцену
mDragTool.startDrag(false, parent.getRect(this)); //инициируем перетаскивание
mDragTool.mouseChildren = false; //отключаем реакцию на мышь для объекта и всех вложенных объектов
mDragTool.mouseEnabled = false;
mDragTool.x = mouseX-mDragTool.width/2; //"ставим" объект по центру курсора
mDragTool.y = mouseY-mDragTool.height/2;
Проблема в следующем - при перетаскивании Tool'а объекты, которые расположены "ниже", не перехватывают события MOUSE_OVER и MOUSE_OUT. Но если я резко дерну мышью, и курсор успеет "убежать" за границы перетаскиваемого объекта, то события обрабатываются. Как сделать перетаскиваемый объект "прозрачным" для событий?
Заранее благодарю за помощь.

Старый 07.09.2012, 11:37
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 2  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Попробовал смоделировать вашу ситуацию.
Код AS3:
package 
{
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.filters.DropShadowFilter;
 
	/**
	 * ...
	 * @author bav
	 */
	public class Main extends Sprite 
	{
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			for (var i:int = 0; i < 2; i++)
			{
				var s:Sprite = createPassive();
				addChild(s);
				s.x = 200 * (i + 1);
				s.y = 200;
			}
 
			var a:Sprite = createActive();
			addChild(a);
			a.mouseChildren = a.mouseEnabled = false;
			a.startDrag(true);
		}
 
		private function createActive():Sprite
		{
			var s:Sprite = new Sprite();
			var g:Graphics = s.graphics;
			g.beginFill(0x00FF00);
			g.drawCircle(0, 0, 30);
			g.endFill();
			return s;
		}
 
		private function createPassive():Sprite
		{
			var s:Sprite = new Sprite();
			var g:Graphics = s.graphics;
			g.beginFill(0xFF0000);
			g.drawCircle(0, 0, 50);
			g.endFill();
			s.addEventListener(MouseEvent.MOUSE_OVER, passiveMouseOverOut);
			s.addEventListener(MouseEvent.MOUSE_OUT, passiveMouseOverOut);
			return s;
		}
 
		private function passiveMouseOverOut(e:MouseEvent):void 
		{
			var s:Sprite = e.currentTarget as Sprite;
			if (e.type == MouseEvent.MOUSE_OVER)
				s.filters = [new DropShadowFilter()];
			else
				s.filters = [];
		}
 
	}
 
}
Красные круги, лежащие ниже, спокойно перехватывают события MOUSE_OVER, MOUSE_OUT. Может быть у вас еще что-то сверху этих объектов лежит?

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

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

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


 


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


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