Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему не срабатывает mouseEnabled = false ? (http://www.flasher.ru/forum/showthread.php?t=137778)

zuxul 22.03.2010 15:30

Почему не срабатывает mouseEnabled = false ?
 
Хочется сделать возможность перетаскивания только в пределах спрайта s1, но не получается отключить мышь для спрайта в событии down, mouseEnabled срабатывает только после события up. Посмотрите пожалуйста, где я туплю?
Код AS3:

package 
{
        import flash.display.*;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.geom.Point;
 
        public class Main extends Sprite
        {
                public function Main():void
                {                       
                        super();
                        addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private var s1:Sprite;
                private var s2:Sprite;
                private var shift:Point = new Point();
 
                private function init(e:Event):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        s1 = new Sprite();
                        s1.graphics.beginFill(0x00FF00, 0.5);
                        s1.graphics.drawRect(0, 0, 300, 300);
                        s1.graphics.endFill();
                        s1.x = 100;
                        s1.y = 100;
                        addChild(s1);
 
                        s2 = new Sprite();
                        s2.graphics.beginFill(0x0000FF, 0.5);
                        s2.graphics.drawRect(0, 0, 50, 50);
                        s2.graphics.endFill();
                        s2.x = 100;
                        s2.y = 100;
                        s1.addChild(s2);
 
                        s2.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener);
                }
 
                private function mouseDownListener(e:MouseEvent):void
                {
                        s1.addEventListener(MouseEvent.ROLL_OUT, roolOutListener);
                        stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener);
                        s1.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
 
                        shift.x = e.localX;
                        shift.y = e.localY;
                        //s2.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener);
                        s2.mouseEnabled = false;
                        s2.mouseChildren = false;
                }
 
                private function mouseMoveListener(e:MouseEvent):void
                {
                        s2.x = s1.mouseX - shift.x;
                        s2.y = s1.mouseY - shift.y;
                }
 
                private function mouseUpListener(e:MouseEvent):void
                {
                        s1.removeEventListener(MouseEvent.ROLL_OUT, roolOutListener);
                        stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpListener);
                        s1.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
                }
 
                private function roolOutListener(e:MouseEvent):void
                {
                        trace("roll out");
                }
        }
}

Добавлено через 3 часа 9 минут
Все разобрался: "mouseEnabled = false" просто не пробрасывает сообщение к элементу, но проверка для верхнего спрайта все так же работает.


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

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