1

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

我怎样才能做到这一点 ?

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

5 回答 5

0

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

于 2009-05-15T10:16:26.960 回答
0

你需要改变你养育孩子的方式。事件“遍历”显示树。所以你有'主应用'->'红色画布'和'主应用'->'绿色画布'。

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

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

如果您这样做,请记住 event.target 是事件的来源(绿色画布),如果您在“红色画布”内收听,那么 event.currentTarget 将是“红色画布”。

于 2009-05-15T10:27:27.197 回答
0

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

于 2009-05-15T11:58:42.860 回答
0

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

cvsselect.addEventListener(MouseEvent.MOUSE_DOWN, md2);
于 2009-05-15T12:17:52.393 回答
0

cvsselect.mouseChildren = false;

cvsselect.mouseEnabled = false;

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

于 2009-10-15T10:18:55.697 回答