Ahh ya veo lo que quieres hacer, hace algún tiempo quise hacer algo como eso y encontré en la web una manera que era convirtiendo el objeto enmascarador a bitmap y después aplicándole un threshold, pero no me agradó porque el treshold tomaba todos los píxeles de color y los convertía a transparentes, por lo que desaparecía el antialiasing de los bordes. Pero quizás a ti te saque del aprieto, utiliza esta clase, ponla en el mismo lugar donde tengas tu flash y prueba el siguiente script para que veas el resultado:
Clase:Código :
package {
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.display.BitmapData;
import flash.display.Bitmap;
public class deleteClip{
private var _displayObj:DisplayObject;
//---Función principal
public function deleteClip(obj:DisplayObject){
_displayObj = obj;
}
//---Función de crear la máscara
public function deleteExclusion(masked:DisplayObject):Sprite{
masked.cacheAsBitmap = true;
var bitmap:BitmapData = new BitmapData(masked.width, masked.height);
var exclusion:ColorTransform = new ColorTransform(0, 0, 0, 1, 0, 0, 0);
var exclusionMatrix:Matrix = new Matrix();
exclusionMatrix.translate(_displayObj.x, _displayObj.y);
var exclusionRectangle:Rectangle = new Rectangle(0, 0, bitmap.width, bitmap.height);
var exclusionPoint:Point = new Point(0, 0);
bitmap.draw(_displayObj, exclusionMatrix, exclusion);
bitmap.threshold(bitmap, exclusionRectangle, exclusionPoint, "<", 0xFFFFFFFF);
var excludeBitmap:Bitmap = new Bitmap(bitmap, "auto", true);
var exclusionMc:Sprite = new Sprite();
exclusionMc.addChild(excludeBitmap);
exclusionMc.cacheAsBitmap = true;
masked.parent.addChild(exclusionMc);
exclusionMc.visible = false;
return exclusionMc;
}
}
}
Código en el flashCódigo :
var fondo:Sprite = new Sprite();
fondo.x = 100;
fondo.y = 100;
with(fondo.graphics){
beginFill(0xCCCCCC, 1);
drawRect(0, 0, 300, 300);
endFill();
}
//---Zona 2
var zona2:Sprite = new Sprite();
with(zona2.graphics){
beginFill(0x0000FF, 1);
drawRect(0, 0, 300, 300);
endFill();
}
//---Exclusión
var exclusion:Sprite = new Sprite();
exclusion.x = 100;
exclusion.y = 100;
with(exclusion.graphics){
beginFill(0xFF0000, 1);
drawCircle(0, 0, 50);
endFill();
}
addChild(fondo).name = "fondo";
addChild(zona2).name = "zona2";
var clipToDelete:deleteClip = new deleteClip(exclusion);
zona2.mask = clipToDelete.deleteExclusion(zona2);
si pudieras al bitmap que se crea no aplicarle threshold, si no convertir todos los pixeles de color a transparentes pero con su respectivo canal alpha quizás logres un antialiasing, yo lo intenté pero no lo logré.