События MOUSE_OUT не запускаются для дочернего элемента, когда parent является mouseEnabled = false, mouseChildren = false - PullRequest
0 голосов
/ 12 июля 2009

Я создаю спрайт, затем добавляю дочерний спрайт.

Я добавляю слушателя для потомков для событий MOUSE_OUT.

Если моя мышь находится в дочернем спрайте, когда я устанавливаю родительский спрайт mouseEnabled = false и mouseChildren = false, MOUSE_OUT не запускается для дочернего объекта.

Но затем, когда я двигаю мышь, MOUSE_OUT запускается для ребенка. MOUSE_OUT также запускается, если я нажимаю. MOUSE_OUT не срабатывает, если я вращаю колесо мыши.

Итак, что здесь происходит?

Это связанный вопрос .


После изучения кода back2dos я обнаружил, что я делаю по-другому, вызывая stage.focus = null непосредственно перед установкой mouseChildren = mouseEnabled = false. Я устанавливаю фокус сцены на нуль, чтобы убрать мигающий курсор из текстового поля ... Есть ли лучший способ сделать это?


вот модифицированный код back2dos. шаги для воспроизведения: нажмите на текстовое поле, получите мигающий курсор. нажмите «кнопку», но не перемещайте мышь между вниз и вверх. обратите внимание, что курсор не мигает (хорошо). Также обратите внимание, что события mouse_out на кнопке не сработали. пока вы не двигаетесь или не щелкаете мышью.

package  {
    import flash.display.*;
    import flash.events.*;
    import flash.geom.ColorTransform;
    public class Test extends Sprite {
        private var child:Sprite
        public function Test() {
                this.addChild(child = new Sprite());
                child.graphics.beginFill(0xFF0000);
                child.graphics.drawRect(0, 0, 100, 20);
                child.addEventListener(MouseEvent.CLICK, onClick);
                child.addEventListener(MouseEvent.MOUSE_OUT, onOut);
                child.addEventListener(MouseEvent.MOUSE_OVER, onOver);


        tf = new TextField( );
        tf.backgroundColor = 0xFF00AA;
        tf.background = true;
        tf.type = TextFieldType.INPUT;
        tf.text = "yo";
        tf.y = 100;
        this.addChild( tf );
        }
        private function onOver(e:MouseEvent):void {
                child.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0xFF);
        }
        private function onOut(e:MouseEvent):void {
                child.transform.colorTransform = new ColorTransform();
        }
        private function onClick(e:MouseEvent):void {
            //try it here...
            stage.focus = null;
                this.mouseChildren = this.mouseEnabled = false;
                //or try it here...
                //stage.focus = null;
        }

    }
}

Ответы [ 2 ]

2 голосов
/ 12 июля 2009

должно быть что-то не так с вашим кодом ... у меня здесь минимальная настройка:

package  {
    import flash.display.*;
    import flash.events.*;
    import flash.geom.ColorTransform;
    public class Test extends Sprite {
        private var child:Sprite
        public function Test() {
            this.addChild(child = new Sprite());
            child.graphics.beginFill(0xFF0000);
            child.graphics.drawRect(0, 0, 100, 20);
            child.addEventListener(MouseEvent.CLICK, onClick);
            child.addEventListener(MouseEvent.MOUSE_OUT, onOut);
            child.addEventListener(MouseEvent.MOUSE_OVER, onOver);
        }
        private function onOver(e:MouseEvent):void {
            child.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0xFF);
        }
        private function onOut(e:MouseEvent):void {
            child.transform.colorTransform = new ColorTransform();
        }
        private function onClick(e:MouseEvent):void {
            this.mouseChildren = this.mouseEnabled = false;
        }
    }
}

должен стать зеленым, когда вы наведете курсор мыши, и красным снова, если вы щелкнете мышью ... при щелчке, он отключен с помощью this.mouseChildren = this.mouseEnabled = false ... на моей машине, это вызывает mouseOut (поэтому прямоугольник снова становится красным ) ... это имеет смысл для меня ... а то, что при щелчке мышью возникают определенные проблемы, является для меня определенным показателем, у вас, должно быть, где-то есть ошибка ... не могли бы вы попытаться уменьшить проблему и опубликовать ее?

Greetz

back2dos

0 голосов
/ 15 июля 2009

вместо этого попробуйте MouseEvent.ROLL_OVER

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...