2011-09-06 3 views
2

brush_mc를 사용하면 브러쉬 스트로크에서 픽셀을 투명하게 만드는 마스크를 쓸 수 있습니다. 그래서 시각적으로 마스크가 지워지고 마스크 된 무비 클립이 나타납니다. 마스크가 완전히 투명하게 바뀌면 추적하고 싶습니다.AS3 마스크가 완전히 채워 졌는지 확인할 수 있습니까?

마스크가 비트 맵 데이터없이 완전히 투명하게되어 있는지 확인할 수 있습니까?

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

저는 As3을 처음 접했기 때문에 설명이 약간 흐려질 수는 있지만 그것이 내 자신을 더 명확하게 해줍니다. 언제든지 저를 바로 대답하십시오 – Opoe

+0

왜 bitmapdata를 사용하고 싶지 않으십니까? – grapefrukt

+0

@grapefrukt 그것을 사용하고 싶습니다만, 마스크만으로 이해할 수 있다면 쉽게 이해할 수있을 것이라고 생각했습니다. 그러나, 나는 비트 맵 데이터를 가지고 몇 가지 시도를했지만 작동시키지 못했다. 당신은 어떤 제안이라도 있으면 환영보다 더! – Opoe

답변

2

here으로 이동하여 비교 기능을 살펴보십시오.
마스크로 동일한 크기이지만 0x00000000의 전체 투명도를 가진 두 번째 bitmapdata 객체를 만들어야합니다. 그런 다음 비교 기능을 사용하십시오. 문서가 말하는 것처럼. BitmapData object가 동일한 (폭, 높이, 와 동일한 화소 값이 같은 경우)

, 상기 방법은 번호 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

고마워요! 매우 유용합니다. 하나의 비트 맵 데이터를 마스크에 할당하는 것이 맞습니까? myBitmapData.draw (mask_mc); ? 이제는 0으로 유지되므로 아직 diffrence가 없습니다. – Opoe

+0

내 대답에 편집을 추가했습니다. 그것은 당신의 상황에 대해 작동하지 않을 수 있습니다 적어도 당신은 테스트하는 방법에 대한 아이디어를 얻을 것이다. 추적이 0이면 차이가 없습니다. –

0

를 반환 마스크의 상태 트랙을 유지하는 카운터의 일부 형식을 구현할 수 있습니다.

브러시 동작 전에 마스크의 상태를 확인하는 것이 좋습니다. 총 픽셀 수를 시작한 다음 픽셀의 색상에 따라 카운터에서 더하거나 빼십시오.

카운터가 일정 값에 도달하면 마스크가 지워집니다.

마스크가 지워진 것처럼 보일 수 있지만 카운터에 필요한 값을 유지하는 임의의 픽셀이 몇 개 있기 때문에 이상적인 솔루션은 아닙니다. 브러쉬 동작 또는 카운터 사용 여부.