AS3 Можно проверить, полностью ли заполнена маска? - PullRequest
2 голосов
/ 06 сентября 2011

С помощью 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(); 
    }
}

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

перейдите на здесь и посмотрите функцию сравнения.
Вам нужно создать второй объект растровых данных того же размера, что и ваша маска, но с полностью прозрачным 0x00000000 Затем используйте функцию сравнения. Как говорят документы.

Если объекты BitmapData эквивалентны (с одинаковой шириной, высотой, и идентичные значения пикселей), метод возвращает число 0.

[EDIT]

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) )
0 голосов
/ 07 сентября 2011

Возможно, вы могли бы реализовать какую-то форму счетчика, которая отслеживает состояние маски.

Идея состояла бы в том, чтобы проверить состояние маски перед действием кисти. У вас есть общее количество пикселей для начала, а затем добавить или вычесть из счетчика в зависимости от цвета пикселя.

Когда ваш счетчик достигает определенного значения, ваша маска стирается.

Это не идеальное решение, хотя ваша маска может выглядеть так, как будто она была стерта, но у вас все еще есть несколько случайных пикселей, которые удерживают счетчик под необходимым значением, поэтому вам, возможно, придется усреднить немного ... с помощью кисти или с помощью счетчика.

...