Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex画布和鼠标事件_Apache Flex_Actionscript 3_Events_Canvas - Fatal编程技术网

Apache flex Flex画布和鼠标事件

Apache flex Flex画布和鼠标事件,apache-flex,actionscript-3,events,canvas,Apache 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="10

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

我该怎么做

<?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>

mouseEnable false成功了,还有其他方法吗?

您需要改变为孩子设置家长的方式。事件“遍历”显示树。所以你有“主应用”->“红色画布”和“主应用”->“绿色画布”

因此,当您单击绿色画布时,事件永远不会到达红色画布。它将从“主应用程序”转到“绿色画布”,并备份到“主应用程序”

您需要做的是使“绿色画布”成为“红色画布”的子对象,然后您可以将侦听器添加到“红色画布”,这样就可以侦听从“绿色画布”触发的事件


如果执行此操作,请记住event.target是事件来自绿色画布的位置,如果您正在“红色画布”中侦听,则event.currentTarget将是“红色画布”。

您还可以实现observer设计模式,但是,您必须扩展Canvas类。

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

cvsselect.addEventListener(MouseEvent.MOUSE_DOWN, md2);

cvsselect.mouseChildren=false

cvsselect.mouseEnabled=false

然后拆下线路
cvsselect.addEventListenerMouseeEvent.MOUSE_DOWN,md2

观察者设计模式将如何改变事件永远不会到达红色画布的事实。如果绿色画布位于红色画布的“上方”,则除非您关闭在绿色画布中侦听鼠标的功能,否则事件将不会穿过绿色画布到达红色画布。