2012-03-14 7 views
1

私は自分のビューにグループを持っています。私はいくつかのcollorでそれを記入し、すべてのダイナミックにマウスイベントを追加しようとしています。 問題は、マウスイベントを追加すると、グループが単に非表示になります。それはまだビュー上に存在し、マウスイベントに正常に応答しますが、私はそれをフレックス:マウスイベントを使用した動的描画グループ

を見ることができない、ここでのコードの例です:

<?xml version="1.0" encoding="utf-8"?> 
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView" creationComplete="onCreationComplete()" > 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <fx:Script> 
     <![CDATA[ 

       public function onCreationComplete():void 
       { 
        testeGroup.graphics.beginFill(0xff0000); 
        testeGroup.graphics.drawRect(0, 0, testeGroup.width, testeGroup.height); 
        testeGroup.graphics.endFill(); 

        testeGroup.addEventListener(MouseEvent.CLICK, function():void{ 
         trace("test"); 
        }); 
       } 

     ]]> 
    </fx:Script> 

    <s:Group id="testeGroup" verticalCenter="0" horizontalCenter="0" width="100" height="100" > 

    </s:Group> 

</s:View> 

マウスイベントなしでグループが表示されますが、ときに私、それが消滅それを追加しようとします。私はENTER_FRAMEイベントのような他のイベントで試してみました。正常に動作しますが、試したすべてのマウスイベントはグループを見えなくします。

実際にopaqueBackgroundプロパティを使用して問題を解決しましたが、このイベントを追加するとグループは消えません。しかし、今私はこの行動の理由が不思議です。

答えて

1

これは興味深いものです。リスナーを追加すると、invalidateDisplayListが呼び出されます。これは、次の入力フレームupdateDisplayListが呼び出され、updateDisplayListグループでgraphics.clear()、また、graphics.clear()を実行するdrawBackground()を呼び出します。基本的に、このような外部からオブジェクトのグラフィックスに描画すると、これらの種類の奇妙な動作が発生する傾向があります。グループを拡張し、次にupdateDisplayListで図面を作成することをお勧めします。もう少し具体的なGroupBase中でaddEventListenerコードがプロパティhasMouseListenersを設定し、そこセッターにそれが表示リストを無効化し、イベントのリストは、このために発生します的には

はここにある:

 case MouseEvent.CLICK: 
     case MouseEvent.DOUBLE_CLICK: 
     case MouseEvent.MOUSE_DOWN: 
     case MouseEvent.MOUSE_MOVE: 
     case MouseEvent.MOUSE_OVER: 
     case MouseEvent.MOUSE_OUT: 
     case MouseEvent.ROLL_OUT: 
     case MouseEvent.ROLL_OVER: 
     case MouseEvent.MOUSE_UP: 
     case MouseEvent.MOUSE_WHEEL: 
     case TouchEvent.TOUCH_BEGIN: 
     case TouchEvent.TOUCH_END: 
     case TouchEvent.TOUCH_MOVE: 
     case TouchEvent.TOUCH_OUT: 
     case TouchEvent.TOUCH_OVER: 
     case TouchEvent.TOUCH_ROLL_OUT: 
     case TouchEvent.TOUCH_ROLL_OVER: 
     case TouchEvent.TOUCH_TAP: 
     case GestureEvent.GESTURE_TWO_FINGER_TAP: 
     case PressAndTapGestureEvent.GESTURE_PRESS_AND_TAP: 
     case TransformGestureEvent.GESTURE_PAN: 
     case TransformGestureEvent.GESTURE_ROTATE: 
     case TransformGestureEvent.GESTURE_SWIPE: 
     case TransformGestureEvent.GESTURE_ZOOM: 
1

別のアプローチグループの子としてグラフィックを使用し、そのグループのグラフィックではなく、グラフィックのグラフィックを変更することです。

<s:Group 
    id="doNotUseMyGraphicsBecauseItWillNotWork" 
    > 
    <s:Graphic 
     id="useMyGraphicsInstead" 
     /> 
</s:Group> 
関連する問題