AS3 Можно проверить, полностью ли заполнена маска?
С 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 ответа
Перейдите сюда и посмотрите функцию сравнения.
Что вам нужно сделать, это создать второй объект bitmapdata того же размера, что и ваша маска, но с полностью прозрачным 0x00000000. Затем используйте функцию сравнения. Как говорят документы.
Если объекты 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) )
Возможно, вы могли бы реализовать какую-то форму счетчика, которая отслеживает состояние маски.
Идея состояла бы в том, чтобы проверить состояние маски перед действием кисти. У вас есть общее количество пикселей для начала, а затем добавить или вычесть из счетчика в зависимости от цвета пикселя.
Когда ваш счетчик достигает определенного значения, ваша маска стирается.
Это не идеальное решение, хотя ваша маска может выглядеть так, как будто она была стерта, но у вас все еще есть несколько случайных пикселей, которые поддерживают счетчик на нужном значении, поэтому вам, возможно, придется усреднить немного... будь то с помощью кисти действие или со счетчиком.