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

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

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

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

Есть клип, который регариует на события мыши (наведение/отведение), но реагирует неадекватно, т.к. есть родительский клип. Как сделать так, чтоб он не мешал?

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Может быть поставить свойство mouseEnabled родительского клипа в false? Вообще же, что значит "неадекватно"? Приведенный вами пример кода, возможно, пролил бы свет на вашу проблему.

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

Регистрация: Sep 2010
Сообщений: 98
mouseEnabled=false делает так, что не реагируют потомки, а нужно,наоборот, чтоб не реагировал родитель. Неадекватно ведёт - мограет вместо того, чтоб исчезать
Код AS3:
addEventListener(MouseEvent.MOUSE_OVER,mouse_over);
addEventListener(MouseEvent.MOUSE_OUT,mouse_out);
 
 
  function mouse_over (event:MouseEvent):void 
              { 
 
          visible=false;
              }
 
	   function mouse_out (event:MouseEvent):void 
              { 
 
         visible=true
 
              }

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Смоделировал ситуацию. Понял, что моргает он вполне адекватно, потому что происходит следующее:
1) Наводим мышку, возникает событие MOUSE_OVER.
2) Вызывается функция mouse_over, которая скрывает объект.
3) Скрытие объекта вызывает событие MOUSE_OUT.
4) Которое, в свою очередь вызывает функцию mouse_out, показывающую объект.
5) Объект показывается, вызывается MOUSE_OVER, и так далее.

Добавлено через 6 минут
Первый вариант, пришедший в голову - изменять не visible, а alpha, однако это не лучший, на мой взгляд, вариант.

Старый 25.03.2011, 04:23
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
mouseChildren = false; Прекращаем холивар

Старый 25.03.2011, 10:11
Andrei0077 вне форума Посмотреть профиль Отправить личное сообщение для Andrei0077 Найти все сообщения от Andrei0077
  № 6  
Ответить с цитированием
Andrei0077

Регистрация: Sep 2010
Сообщений: 98
Спасибо, bav, ни за что бы не догадался, что visible=false по сути то же, что и MOUSE_OVER

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
in4core, объясните мне, малограмотному, что вы имели в виду под mouseChildren = false;, и где в первых четырех постах вы узрели холивар? Я смоделировал ситуацию следующим образом. Может я где-то ошибся и неверно понял автора топика?

Код AS3:
package 
{
    import flash.display.DisplayObject;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.EventPhase;
 
    public class TestProject extends Sprite 
    {
        private var parentClip:Sprite;
        private var childClip:Sprite;
 
        public function TestProject() {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
 
        private function init(event:Event = null):void {
            removeEventListener(Event.ADDED_TO_STAGE, init);
 
            parentClip = new Sprite();
            parentClip.graphics.lineStyle(1, 0, 1, true);
            parentClip.graphics.beginFill(0xFFFF00);
            parentClip.graphics.drawCircle(0, 0, 100);
            parentClip.graphics.endFill();
            parentClip.x = parentClip.y = 100;
 
            childClip = new Sprite();
            childClip.graphics.lineStyle(1, 0, 1, true);
            childClip.graphics.beginFill(0x00FFFF);
            childClip.graphics.drawCircle(0, 0, 50);
            childClip.graphics.endFill();
 
            addChild(parentClip);
            parentClip.addChild(childClip);
 
            childClip.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
            childClip.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
            // Вот это напрямую к теме не относится.
            parentClip.addEventListener(MouseEvent.CLICK, parentClickHandler);
        }
 
        // Строчка "Parent" будет выводиться только в случае клика, собственно,
        // по родителю.
        private function parentClickHandler(event:MouseEvent):void {
            // Почитайте про фазы событий.
            if (event.eventPhase == EventPhase.AT_TARGET)
                trace("Parent.");
        }
 
        private function mouseOverHandler(event:MouseEvent):void {
            (event.target as DisplayObject).alpha = 0.01;
        }
 
        private function mouseOutHandler(event:MouseEvent):void {
            (event.target as DisplayObject).alpha = 1;
        }
 
    }
}
Добавлено через 31 минуту
Andrei0077, возможно следующие объяснения будут излишни, но все же. visible = false – это задание значения свойству объекта. MOUSE_OVER – это тип события. Следовательно они не равнозначны. Когда вы устанавливаете visible в false, и при этом курсор расположен над объектом, мышь выходит за пределы объекта, тем самым инициируя событие MouseEvent.MOUSE_OUT.


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

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

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


 


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


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