마스크는 플래시에서 특정 영역만 보이게 하는 기능입니다. 기본적으로 마스크는 알파를 지원하지 않으므로 알파값이 있는 마스크를 사용하기 위해서는 마스크하는 클립과 마스크 당하는 클립에 cacheAsBitmap 을 활성화 해줘야 합니다. 코드로 보면 아래와 같습니다.
_mask.cacheAsBitmap = true; _contents.cacheAsBitmap = true; _contents.mask = _mask;
이런 마스크의 기능을 블렌드모드를 설정함으로서 거의 동일하게 구현 할 수 있는데 코드는 아래와 같습니다.
_mask.blendMode = BlendMode.ALPHA; _contents.blendMode = BlendMode.LAYER; _contents.addChild(_mask);
이 블렌드 모드를 잘 사용하면 마스크를 반대로 입힐 수도 있습니다.
_mask.blendMode = BlendMode.ERASE; _contents.blendMode = BlendMode.LAYER; _contents.addChild(_mask);
여튼 최근에 상당히 과도한 마스크작업을 해야 할 일이 생겨서 기본적인 mask 와 blend 를 이용한 마스크의 성능을 비교해 보았습니다. 사실 결과는 조금 의아하네요. 기본으로 알파만 있는 마스크의 경우는 기본 mask 가 더 빠른데 마스크에 블러를 적용하니 오히려 blend를 이용한 마스크가 미미하게 더 빠르네요.하지만 그렇게 큰 격차는 아닙니다. 다만 기본 mask를 이용 할 경우 cacheAsBitmap으로 인해 메모리가 계속 상승하는 단점이 있다는 점을 고려하면 blend를 이용한 마스크의 사용도 적극 고려해 볼만 할 것 같습니다.
혹시 알파값이 있는 마스크의 성능을 좀 더 높일 수 있는 좋은 다른 방법이 있다면 좀 알려주세요~ 😉