2009-05-15 13 views
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> 

答えて

0

緑のキャンバスにリスナーを、マウスを下に追加しないでください、すなわち

cvsselect.addEventListener(MouseEvent.MOUSE_DOWN, md2); 
0

mouseEnable false、他の方法でトリックしましたか?

0

子供を親とする方法を変更する必要があります。イベントは表示ツリーを「歩く」。だから、あなたは 'メインアプリ' - > '赤いキャンバス' & 'メインアプリ' - > '緑のキャンバス'を持っています。

緑のキャンバスをクリックすると、イベントは赤いキャンバスに届くことはありません。 「メインアプリ」から「グリーンキャンバス」&に戻って「メインアプリ」に戻ります。

「赤いキャンバス」の赤いキャンバスに「緑のキャンバス」を作成し、「赤いキャンバス」にリスナーを追加すると、「赤いキャンバス」から放火されたイベントを聴くことができます緑のキャンバス '。

event.targetはイベントが発生した場所(緑のキャンバス)で、「赤いキャンバス」の内部を聞いている場合はevent.currentTargetが「赤いキャンバス」になります。

0

また、オブザーバデザインパターンを実装することもできますが、Canvasクラスを拡張する必要があります。

+0

どのようにオブザーバーのデザインパターンは、イベントが赤いキャンバスに到達しないという事実を変えるでしょうか。緑色のキャンバスが赤いキャンバスの上にある場合、緑色のキャンバスでマウスを聴くために能力をオフにしない限り、イベントは緑色を通って赤いキャンバスに到達しません。 – kenneth

0

cvsselect.mouseChildren = falseの行を削除します。

cvsselect.mouseEnabled = false;

を削除します。cvsselect.addEventListener(MouseEvent.MOUSE_DOWN、md2);

関連する問題