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

緑のキャンバスにマウス ダウン リスナーを追加しないでください。つまり、行を削除します。

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 に答える
0

mouseEnable false はうまくいきましたが、他の方法はありますか?

于 2009-05-15T10:16:26.960 に答える
0

子供を育てる方法を変える必要があります。イベントは表示ツリーを「ウォーク」します。したがって、「メインアプリ」->「赤いキャンバス」と「メインアプリ」->「緑のキャンバス」があります。

したがって、緑のキャンバスをクリックしても、イベントが赤のキャンバスに到達することはありません。「メイン アプリ」から「グリーン キャンバス」に移動し、「メイン アプリ」に戻ります。

あなたがする必要があるのは、「緑のキャンバス」を「赤のキャンバス」の子にすることです。次に、「赤のキャンバス」にリスナーを追加すると、「緑のキャンバス」から発生したイベントをリッスンできます。

これを行う場合、event.target はイベントの発生元 (緑のキャンバス) であり、「赤いキャンバス」内でリッスンしている場合は、event.currentTarget が「赤いキャンバス」になることに注意してください。

于 2009-05-15T10:27:27.197 に答える