1

シェイプを使用してビットマップをマスクし、これをムービー クリップに変換しました。これで、マスクされた画像だけがムービークリップ内に表示されます。このムービー クリップにマウス クリック イベント リスナーを追加しましたが、ムービー クリップ全体に対してクリックが行われます。ムービークリップの表示領域のみをクリックするにはどうすればよいですか。

`

//img is a bitmap on stage and s1 is an irregular shape on the stage which is a movieclip
img.mask = s1;

var bmp:Bitmap = new Bitmap(new BitmapData(img.width,img.height,true));
bmp.bitmapData.draw(img);
var n:MovieClip = new MovieClip();



n.addChild(bmp);

addChild(n);


trace(s1.width + " " + s1.height);
trace(n.width + " " + n.height);
n.addEventListener(MouseEvent.CLICK, clicked);
removeChild(s1);
removeChild(img);

function clicked(m:MouseEvent):void
{
            trace(n.hitTestPoint(n.mouseX,n.mouseY, false));
            trace("clikckedek kkc kkeke");
}

`

4

2 に答える 2

1

クリックハンドラーをマスク(コードのs1)に移動するだけではいけませんか?

これにより、表示されている円の内側でのみクリックできるようになります。

import flash.events.MouseEvent;
import flash.display.Sprite;

var shape:Sprite = addChild(new Sprite()) as Sprite;
shape.graphics.beginFill(0xFF0000, 1);
shape.graphics.drawRect(0,0,200,200);
shape.x = shape.y = 50;

var masque:Sprite = shape.addChild(new Sprite()) as Sprite;
masque.graphics.beginFill(0x00FF00, 1);
masque.graphics.drawCircle(100,100,100);
masque.buttonMode = masque.useHandCursor = true;
shape.mask = masque;

function handleMasqueClick($e:MouseEvent):void
{
    trace("CLICK");
}

masque.addEventListener(MouseEvent.CLICK, handleMasqueClick);

よくわかりませんが、これはあなたが求めていたものですか?

それ以外の場合、マスクされた領域内のビットマップの透明な部分へのポジティブヒットを避けたい場合は、マスク上のマウスクリックの位置を取得し、ビットマップ自体に対してそのポイントをヒットテストする必要があります(を参照)。 :http ://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#hitTest%28%29 )-おそらく、localToGlobal / GlobalToLocalを少し調整して、すべてを取得します。同じ座標空間。

于 2012-09-02T17:37:56.823 に答える