Звучит как идеальный вариант использования Альфа-маски .
Попробуйте:
import spark.core.MaskType;
private function addMask():void {
var vidMask:SpriteVisualElement = new SpriteVisualElement();
// first mask the entire thing transparent
vidMask.graphics.beginFill(0x000000, 0);
vidMask.graphics.drawRect(0,0,480,320);
vidMask.graphics.endFill();
// then draw the rounded rectangle (or whatever) that you want to show
vidMask.graphics.beginFill(0x000000, 1); //color doesn't matter
vidMask.graphics.drawRoundRect(0,0,480, 320, 200, 200); // choose
vidMask.graphics.endFill();
addElement(vidMask); //the mask has to be on the Display List
vid.mask = vidMask; // attach the mask to the sve
vid.maskType = MaskType.ALPHA; // choose alpha masking
}
А в вашем MXML:
<s:SpriteVisualElement id="vid" width="480" height="320" addedToStage="addMask()">
ОБНОВЛЕНИЕ
На самом деле, теперь, когда я еще немного подумал об этом, мой первоначальный ответ вводит в заблуждение.Вам действительно нужно иметь обтравочную маску (не альфа-маску), поскольку в прозрачности нет градации.Вы можете обновить функцию addMask
следующим образом:
private function addMask():void {
var vidMask:SpriteVisualElement = new SpriteVisualElement();
// draw the rounded rectangle (or whatever) that you want to show
vidMask.graphics.beginFill(0x000000, 1); //color doesn't matter
vidMask.graphics.drawRoundRect(0,0,480, 320, 200, 200); // the last two effect the roundness
vidMask.graphics.endFill();
addElement(vidMask); //the mask has to be on the Display List
vid.mask = vidMask; // attach the mask to the sve
vid.maskType = MaskType.CLIP; // choose clip masking
}
Если вы в конечном итоге не используете градуированную непрозрачность в своей маске, этот метод будет предпочтительнее, поскольку он должен упростить компоновку, которую должен нести игроквне.