Flex холст и мышь - PullRequest
       8

Flex холст и мышь

1 голос
/ 15 мая 2009

Этот простой код показывает зеленый холст на красном холсте, я хотел бы, чтобы Зеленый холст позволил событию мыши поймать ребенка позади него : красный холст.

Как я могу это сделать?

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()">
    <mx:Canvas id="bg" width="100%" height="100%" backgroundColor="white" />

     <mx:Script>
        <![CDATA[

            private function init():void {

            var cvstest:Canvas = new Canvas();
            cvstest.width = 200;
            cvstest.height = 200;
            cvstest.x = 100;
            cvstest.doubleClickEnabled = true;
            cvstest.addEventListener(MouseEvent.DOUBLE_CLICK, dc);
            cvstest.addEventListener(MouseEvent.MOUSE_DOWN, md);
            cvstest.setStyle("backgroundColor",0xff0000);
            this.addChild(cvstest);   


            var cvsselect:Canvas = new Canvas();
            cvsselect.width = 20;
            cvsselect.height = 20;
            cvsselect.x = 140;
            cvsselect.doubleClickEnabled = false;
            cvsselect.mouseChildren = true;
            cvsselect.addEventListener(MouseEvent.MOUSE_DOWN, md2);
            cvsselect.setStyle("backgroundColor",0x00ff00);
            this.addChild(cvsselect);   
            }

         public function dc (e:MouseEvent) : void {
            trace("DOUBLE CLICK ON TEST CANVAS");
        } 
         public function md (e:MouseEvent) : void {
            trace("SINCLICK ON TEST CANVAS");
        } 
        public function md2 (e:MouseEvent) : void {
            trace("GREEN CLICK ON TEST CANVAS");
        } 
        ]]>    
    </mx:Script>
</mx:Application>

Ответы [ 5 ]

0 голосов
/ 15 октября 2009

cvsselect.mouseChildren = false;

cvsselect.mouseEnabled = false;

и удали строку cvsselect.addEventListener (MouseEvent.MOUSE_DOWN, md2);

0 голосов
/ 15 мая 2009

Не добавляйте слушателя мыши к зеленому холсту, т.е. удаляйте строку

cvsselect.addEventListener(MouseEvent.MOUSE_DOWN, md2);
0 голосов
/ 15 мая 2009

Вам нужно изменить способ воспитания детей. События «гуляют» по дереву отображения. Итак, у вас есть «главное приложение» -> «красный холст» и «главное приложение» -> «зеленое полотно».

Поэтому, когда вы нажимаете на зеленый холст, события никогда не достигают красного холста. Он перейдет от «основного приложения» к «зеленому холсту» и обратно к «основному приложению».

Что вам нужно сделать, так это сделать «зеленый холст» дочерним по отношению к «красному холсту», тогда вы сможете добавить слушателей к «красному холсту», и они смогут прослушивать события, запущенные из «зеленого» холст.

Если вы сделаете это, помните, что event.target - это то, откуда произошло событие (зеленый холст), и если вы слушаете внутри «красного холста», то event.currentTarget будет «красным холстом».

0 голосов
/ 15 мая 2009

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

0 голосов
/ 15 мая 2009

mouseEnable false сделал трюк, другими способами?

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