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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.05.2011, 23:06
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 1  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
По умолчанию Отследить цель мышиного события

Есть контент-спрайт, в котором находятся различный спрайты и текстовые поля, имеющие мышиные события. Мне нужно сделать так, чтобы по клику на любой области, кроме самого спрайта-контента, контен исчезал. То есть фактически мне нужно определить кликнул я по спрайту-контенту или вне его. Я могу это сделать, если
Код AS3:
this.mouseChildren = false;
private function onStageClick(e:MouseEvent):void 
{
	trace(e.target);
}
Но тогда дети спрайта-контента не будут реагировать на мышь, что мне не нужно.

Как можно еще решить данную проблему?

Добавлено через 6 минут
Я решил эту проблему проверяя координаты мышки относительно спрайта-контента. может есть более лучшее решение?
Код AS3:
if (this.mouseX > this.width / 2 || this.mouseX < -this.width / 2 || this.mouseY > this.height / 2 || this.mouseY < -this.height / 2)
			{
				trace(e.target)
			}


Последний раз редактировалось DZHETIGAPA; 21.05.2011 в 23:13.
Старый 22.05.2011, 00:14
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Может Вы лучше скажете, КУДА Вы добавляете листенер и где написаны эти куски кода, что здесь this? Вас слегка совсем непонятно.
__________________
Reality.getBounds(this);

Старый 22.05.2011, 00:17
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 3  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
this - это контент-спрайт.
Код AS3:
stage.addEventListener(MouseEvent.CLICK, onStageClick)
Извиняюсь за немного непонятный топик.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
ОК. Но trace(e.target) не может выдавать стейдж, если Вы кликаете по контенту. Таргетом будет контент. На стейдж будет указывать e.currentTarget.
Вы хотите на самом деле ловить клик в том месте, где нет контента, но еще есть прямоугольник контейнера? В пустом месте контейнера? Тогда придется создать ему заливку прозрачным цветом.
__________________
Reality.getBounds(this);

Старый 22.05.2011, 00:37
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 5  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Цитата:
Сообщение от Wolsh Посмотреть сообщение
ОК. Но trace(e.target) не может выдавать стейдж, если Вы кликаете по контенту. Таргетом будет контент. На стейдж будет указывать e.currentTarget.
Полностью согласен. Но currentTarget будет указывать на стэйдж в любом месте клика на сцене, даже на спрайте-контенте. Мне же нужно: если клик за пределами контента, то происходит то-то, если клик на контенте, то ничего не происходит. Но контенту mouseChildren=false я не могу присвоить, так как там дети с мышиными событиями.
Цитата:
Вы хотите на самом деле ловить клик в том месте, где нет контента, но еще есть прямоугольник контейнера? В пустом месте контейнера? Тогда придется создать ему заливку прозрачным цветом.
Я хочу ловить клик за пределами прямоугольного контейнера спрайта. Всмысле создать заливку прозрачным цветом? То есть положить под контент и ловить target именно этой прозрачной обалсти?

Старый 22.05.2011, 00:44
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Да. Ну не обязательно так дословно, заливкой может быть не интерактивный объект - Шейп например, или это может быть graphics самого спрайта-контейнера, как Вам удобно. Может быть и интерактивный - закрашенный спрайт. В любом случае e.target уже не будет указывать на стейдж, если клик придется на эту область. То есть надо будет проверять в обработчике, является ли e.target стейджем, если да - то клик мимо контейнера и его контента.

Добавлено через 4 минуты
Точнее, так не правильно говорить)) Правильно - "клик был по пустому стейджу".
Это значит, что если клик придется не на Ваш контейнер, а на какой-то другой объект на стейдже, условие так же не выполнится, таргетом будет не стейдж а этот "другой объект".
__________________
Reality.getBounds(this);

Старый 22.05.2011, 00:59
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 7  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Спасибо большое!

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Если все же надо будет разделить клик по контейнеру, клик по пустому стейджу и клик по объекту на стейдже, но не контейнеру, можно повесить на контейнер листенеры событий ROLL_OVER и ROLL_OUT, и ставить в них флаг, говорящий что мышка сейчас над контейнером или нет. Тогда в обработчике, когда окажется что e.target указывает не на стейдж (то есть кликнули не на пустом месте), можно узнать, не над контейнером ли мышка. Если нет, то закрыть контейнер.
__________________
Reality.getBounds(this);

Старый 22.05.2011, 01:14
ShadowsInRain вне форума Посмотреть профиль Отправить личное сообщение для ShadowsInRain Найти все сообщения от ShadowsInRain
  № 9  
Ответить с цитированием
ShadowsInRain
 
Аватар для ShadowsInRain

Регистрация: Mar 2011
Сообщений: 35
Код AS3:
if( !myContentSprite.contains(e.target) ) // промазал и мимо спрайта и мимо его чайлдов
mouseChildren не трогать.

Старый 22.05.2011, 03:38
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
точно, так проще))
__________________
Reality.getBounds(this);

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

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

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


 


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


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