2012-01-05 5 views
1

単純なテストAirアプリケーションを使って、マスキングのさまざまな方法を試したり、hitAreaを使用してマウスイベントをPNGの透過領域で無視したりしました。それを動作させるために適切なものを見つけることができないようでも、Web上で簡単な例を見つけることもできません。Flexイメージを使用してPNGの透過領域でマウス操作を無視するにはどうすればよいですか?

これらの方法のいずれかの透過領域をクリックしても、クリックがバックグラウンドで処理されることはありません。

ここで私が持っているコードです:

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" 
        status="{clicked}"> 

<fx:Declarations> 
    <s:Image id="maskX" source="@Embed('mask1.png')" cacheAsBitmap="true"/> 
</fx:Declarations> 

<fx:Script> 
    <![CDATA[ 
     [Bindable] public var clicked:String = "none"; 

     protected function onClick(event:MouseEvent):void 
     { 
      clicked = event.currentTarget["id"] + "\t" + (new Date()).time; 
     } 
    ]]> 
</fx:Script> 

<!-- Some sort of background so I can see transparency working. --> 
<s:Group id="background" width="100%" height="100%" click="onClick(event)"> 
    <s:Rect width="100%" height="100%"> 
     <s:fill> 
      <s:LinearGradient rotation="90"> 
       <s:GradientEntry color="blue"/> 
       <s:GradientEntry color="white"/> 
      </s:LinearGradient> 
     </s:fill> 
    </s:Rect> 
</s:Group> 

<s:Group width="100%" height="100%"> 
    <s:layout> 
     <s:TileLayout/> 
    </s:layout> 

    <!-- Simple attempt at having Flex respect the alpha in the PNG itself as transparent 
      with regard to clicks --> 
    <s:Group id="image1" click="onClick(event)" mouseEnabledWhereTransparent="false"> 
     <s:Image source="@Embed('image1.png')" cacheAsBitmap="true"/> 
    </s:Group> 

    <!-- Use an explicit bitmap mask for the hitArea --> 
    <s:Group id="image2" click="onClick(event)" hitArea="{mask2}" mouseEnabledWhereTransparent="false"> 
     <s:Image source="@Embed('image1.png')"/> 
     <s:Image id="mask2" source="@Embed('mask1.png')" cacheAsBitmap="true"/> 
    </s:Group> 

    <!-- Try using just the mask bitmap --> 
    <s:Group id="image3" click="onClick(event)" hitArea="{mask3}" mouseEnabledWhereTransparent="false"> 
     <s:Image id="mask3" source="@Embed('mask1.png')" cacheAsBitmap="true"/> 
    </s:Group> 

    <!-- Specify the hitArea with alternate syntax --> 
    <s:Group id="image4" click="onClick(event)" mouseEnabledWhereTransparent="false"> 
     <s:Image source="@Embed('image1.png')"/> 
     <s:hitArea> 
      <s:Image id="mask4" source="@Embed('mask1.png')" cacheAsBitmap="true"/> 
     </s:hitArea> 
    </s:Group> 
</s:Group> 

私はここにアップロードした画像1とマスク1ファイル:

イメージ1 - http://img853.imageshack.us/img853/923/image1yj.png

マスク1 - http://img715.imageshack.us/img715/3755/mask1.png

+0

「マスク」も使ってみましたが、マスキングができませんでした。私のアプローチには基本的に間違ったことがはっきりとあります。 – Nimai

+0

私はR&Dをやっていて、これはあなたに役立つリンクを得ました。 [Link](http://dougmccune.com/blog/2007/02/03/using-hittestpoint-or-hittest-on-transparent-png-images/)をご覧ください。 –

+0

あなたはSagarが正しいと思います。私はすでにこの問題に直面していたからです。 –

答えて

1

は、実際には可能です。 FlexはPNGのアルファチャンネルを尊重しませんが、可視コンテンツをスプライトにレンダリングして、それをDisplayObjectのマスクとして使用できます。この方法を使用すると、pingの可視領域だけがマウスイベントを引き起こし、すべての不透明度を尊重する必要があります。あなたが物を重ねているなら、あなたはいくつかの問題を打つかもしれません。

特定のカラーチャンネルではなく、コンテンツのマスキングにアルファチャンネルを使用するようにしてください。

+0

返事をありがとう。私はあなたが私の検索で参照したその記事を見ました。 上記の私自身の例では、2つのテストケースが1ビットのPNGビットマップをhitAreaとして使用しています。それらは働いていません。私はマスクをロードするためにイメージを使用しているからですか? – Nimai

関連する問題