Flex画布和鼠标事件

时间:2009-05-15 10:07:23

标签: flex actionscript-3 events canvas

这个简单的代码在红色画布上显示绿色画布,我希望绿色画布让鼠标按下事件被他身后的孩子抓住:红色画布。

我该怎么做?

<?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 :(得分:0)

mouseEnable false做了这个伎俩,还有其他方法吗?

答案 1 :(得分:0)

您需要改变孩子的父母方式。事件“走”显示树。所以你有'主应用' - &gt; '红帆'&amp; '主应用' - &gt; '绿色帆布'。

因此,当您单击绿色画布时,事件永远不会到达红色画布。它将从'主应用'转变为'绿色帆布'和&amp;回到'主应用'。

你需要做的是让'绿色画布'成为'红色画布'的孩子,然后你就可以将听众添加到'红色画布'中,并且能够听到从'绿色画布'发出的事件画布。

如果你这样做,请记住event.target是事件来自的地方(绿色画布),如果你在'红色画布'里面听,那么event.currentTarget将是'红色画布'。

答案 2 :(得分:0)

您也可以实现观察者设计模式,但是您必须扩展Canvas类。

答案 3 :(得分:0)

不要将鼠标按下侦听器添加到绿色画布,即删除行

cvsselect.addEventListener(MouseEvent.MOUSE_DOWN, md2);

答案 4 :(得分:0)

cvsselect.mouseChildren = false;

cvsselect.mouseEnabled = false;

并删除该行 cvsselect.addEventListener(MouseEvent.MOUSE_DOWN,md2);