AS3可以检查面罩是否完全填满?

时间:2011-09-06 12:10:19

标签: flash actionscript-3 mask fill erase

使用brush_mc,您可以刷过遮罩,在画笔笔划中将像素变为透明。 因此在视觉上它会擦除蒙版并且会出现蒙面动画片段。 如果面具完全变透明,我想跟踪。

是否可以在没有bitmapdata的情况下检查面具是否完全透明?

// 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(); 
    }
}

2 个答案:

答案 0 :(得分:2)

转到here并查看比较功能 您需要做的是创建第二个与掩码大小相同但完全透明的0x00000000的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) )

答案 1 :(得分:0)

你可能可以实现某种形式的计数器来保持掩码状态的轨迹。

想法是在刷动作之前检查蒙版的状态。您有一个总像素数,然后根据像素的颜色从计数器中添加或减去。

当您的计数器达到某个值时,您的面具将被删除。

这不是一个理想的解决方案,因为你的面具可能看起来已被删除,但你仍然有一些随机像素使计数器保持在必要的值,所以你可能需要平均一点......是否用刷子动作或用计数器。