2

Brush_mcを使用すると、マスクをブラシで塗りつぶすことができます。これにより、ブラシストロークでピクセルが透明になります。したがって、視覚的にはマスクが消去され、マスクされたムービークリップが表示されます。マスクが完全に透明になったらトレースしたいです。

ビットマップデータなしでマスクが完全に透明になっていることを確認することはできますか?

// this creates a mask that hides the movieclip on top
var mask_mc:MovieClip = new MovieClip();
addChild(mask_mc)

//assign the mask to the movieclip it should 'cover'
mc1.mask = mask_mc;

//add event listeners for the 'brush'
brush_mc.addEventListener(MouseEvent.MOUSE_DOWN,brushDown);
brush_mc.addEventListener(MouseEvent.MOUSE_UP,brushUp);

//function to drag the brush over the mask
function brushDown(dragging:MouseEvent):void{
    dragging.currentTarget.startDrag();
    MovieClip(dragging.currentTarget).addEventListener(Event.ENTER_FRAME,erase) ;
    mask_mc.graphics.moveTo(brush_mc.x,brush_mc.y);
}

//function to stop dragging the brush over the mask
function brushUp(dragging:MouseEvent):void{
    dragging.currentTarget.stopDrag();
    MovieClip(dragging.currentTarget).removeEventListener(Event.ENTER_FRAME,erase);
}

//fill the mask with transparant pixels so the movieclip turns visible
function erase(e:Event):void{
    with(mask_mc.graphics){
        beginFill(0x000000);
        drawRect(brush_mc.x,brush_mc.y,brush_mc.width,brush_mc.height);
        endFill(); 
    }
}
4

2 に答える 2

2

ここに移動して、比較関数を確認してください。
必要なのは、マスクと同じサイズで、完全に透明な0x00000000の2番目のbitmapdataオブジェクトを作成することです。次に、比較機能を使用します。ドキュメントが言うように。

BitmapDataオブジェクトが同等(同じ幅、高さ、同じピクセル値)の場合、メソッドは数値0を返します。

[編集]

var myTestingBitmapData:BitmapData = new BitmapData(mask_mc.width, mask_mc.height, true, 0x00000000);

// this is untested code but you might have to comvert mask_mc to bitmapdata
trace( myTestingBitmapData.compare( mask_mc) )
于 2011-09-06T21:50:41.030 に答える
0

おそらく、マスクの状態を追跡する何らかの形式のカウンターを実装できます。

アイデアは、ブラシアクションの前にマスクの状態をチェックすることです。最初にピクセルの総数があり、ピクセルの色に応じてカウンターから加算または減算します。

カウンターが一定の値に達すると、マスクが消去されます。

これは理想的な解決策ではありませんが、マスクが消去されたように見えるかもしれませんが、カウンターを必要な値以下に保つランダムなピクセルがまだいくつかあるため、ブラシを使用するかどうかにかかわらず、少し平均化する必要があります。アクションまたはカウンター付き。

于 2011-09-07T01:46:56.080 に答える