Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Что означает MouseEvent.MOUSE_OVER? (http://www.flasher.ru/forum/showthread.php?t=143555)

inMashine 19.08.2010 14:01

Что означает MouseEvent.MOUSE_OVER?
 
Добрый день.
Как я понимаю понимаю событие MOUSE_OVER возникает тогда, когда пользователь
наводит мышь на объект (к примеру container:Sprite).
Если же он водит мышкой, не выходя за пределы этого объекта container, то событие MOUSE_OVER не возникает.
Но если внутрь этого объекта поместиь еще какой-нибудь объект (скажем square:Sprite),
то событие MOUSE_OVER будет возникать и при наведении пользователем мышки на этот дочерний объект
(хотя по идее, так как он находится внутри спрайта container, никакого MOUSE_OVER быть не должно ).

Если кто понимает от чего так происходит - поделитесь плз.

Код, демонстрирующий данное явление (Box.as):
Код AS3:

package{
        import flash.display.Sprite;
        import flash.geom.Point;
        import flash.events.*;
 
        public class Box extends Sprite{    // Document class
                public function Box(){
                        var container:Sprite = new Sprite();                               
 
                        var square:Sprite = new Sprite();
                        square.graphics.beginFill(0xFFCC00);
                        square.graphics.drawRect(0, 0, 400, 400);
 
                        var square2:Sprite = new Sprite();
                        square2.graphics.beginFill(0xDDCC00);
                        square2.graphics.drawRect(0, 0, 200, 400);
 
                        addChild(container);
                        container.addChild(square);
                        container.addChild(square2);
 
                        container.addEventListener(MouseEvent.MOUSE_OVER, traceSmth);
                }
 
                private function traceSmth(event:MouseEvent):void{
                        trace("rollOver under container Sprite");
                }
        }
}


Zebestov 19.08.2010 14:11

Все верно:

- square и square2 реагируют на действия мыши
- события мыши всплывающие

Вот и выходит, что у container "тела" как такового нет и он вообще мышь не ловит — нечем!
В свою очередь square и square2 реагируют на мышь, а container лишь ловит события от обоих.

Если тебе нужно, чтобы sqare2 не реагировал на мышь:

Код AS3:

square2.mouseEnabled = false;


etc 19.08.2010 14:12

Zebestov, тогда ещё и mouseChildren в false.

Jewelz 19.08.2010 14:13

inMashine, чтобы понять достаточно посмотреть help

"Событие mouseOver отправляется каждый раз при входе мыши в область дочернего объекта контейнера экранных объектов, даже если она перешла туда с другого его дочернего объекта. Это событие имеет иную цель, в отличие от события rollOver, которое служит для упрощения кодировки поведений отката для контейнеров экранных объектов с потомками. Когда мышь переходит в область экранного объекта или его потомков с объекта, не являющегося его потомком, экранный объект отправляет событие rollOver. События rollOver отправляются последовательно вниз по родительской цепочке объекта, начиная с предка верхнего уровня, не являющимся корнем или предком объекта relatedObject, и кончая самим объектом."

Zebestov 19.08.2010 14:18

etc, в самом общем случае — да, согласен.

etc 19.08.2010 14:23

Zebestov, но я бы поставил mouseChildren у родителя и всё. Или воспользовался бы ROLL_OVER.

Zebestov 19.08.2010 14:30

etc, точно.


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

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