mouseChildren = false не работает для меня - PullRequest
4 голосов
/ 03 января 2012

Кстати, с новым годом!

Я хочу отделить обработку событий от контейнера и его потомка. Итак, как вы можете видеть, мой исходный код очень прост:

    package  {
    import flash.display.Sprite;
    import flash.display.*;
    import flash.events.*;

    public class test extends Sprite{

        public function test() {
            var container:Sprite = new Sprite();  // my container
            container.graphics.beginFill(0, 1);  // whatever the color
            container.graphics.drawRect(0, 0, 100, 100); // origin at 0,0
            container.graphics.endFill();
            addChild(container);

            var decor:Sprite = new Sprite();  // and it child
            decor.graphics.beginFill(0, 1);  // whatever the color
            decor.graphics.drawRect(200, 200, 100, 100);  // origin at 200,200
            decor.graphics.endFill();
            container.addChild(decor);
            container.mouseChildren = false;
            container.addEventListener(MouseEvent.ROLL_OVER, onOver, false, 0, true);
        }
        private function onOver(e: MouseEvent):void {
            trace("ROLL trace");
        }
    }
}

Когда я переворачиваю контейнерный объект, у меня есть след (хорошо для меня). НО, когда я переворачиваю объект декора, у меня тоже есть след (не то, что я хочу). Я просто хочу, чтобы контейнер вызывался событием мыши, а не дочерним. Так что случилось с моим mouseChildren = false ....? Я не понимаю ...

Ответы [ 2 ]

4 голосов
/ 03 января 2012

Объект decor является членом container, и поэтому он оценивается вместе с любым другим содержимым в container.

mouseChildren = false; - это не способ полностью отключить события мыши, а уменьшить сложность в составных экранных объектах: событие мыши все еще вызывается, но свойство target события не будет содержать ссылку на дочерний объект мыши фактически переносится, но только на родительский объект, для которого было установлено свойство.

Если вы хотите, чтобы decor был полностью проигнорирован, используйте decor.mouseEnabled = false;.

1 голос
/ 03 января 2012

Я пробовал mouseEnabled = false, и он тоже не работает. На другом форуме ребята сказали мне, что 'заполненный объект внутри контейнера вызовет обработчик события' . Поэтому его решение состоит в том, чтобы иметь контейнер и создать 2 дочерних элементов: один обрабатывает событие мыши, а другой - как decor.

И это работает довольно хорошо.

...