我正在寻找一种让我的spritevisualelement具有圆角的方法,以便它以圆形显示。
SpriteVisualElement包含来自FMS的视频流以进行显示,但我不希望它是矩形的。
有人给我一个暗示吗?
<s:BorderContainer
borderColor="0x000000"
borderAlpha="50"
cornerRadius="150"
borderWeight="3"
x="161"
y="10"
>
<s:SpriteVisualElement id="vid" width="480" height="320"/>
</s:BorderContainer>
<s:SpriteVisualElement id="vid_self_preview" x="710" y="373" width="90" height="60"/>
但是Container保持在后台,并且“vid”(= id)中显示的整个远程视频位于前台。 如何将Container设置为Foreground?然后只需设置整个应用程序背景即可。
答案 0 :(得分:0)
听起来像Alpha Mask的完美用例。
试试这个:
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
}
除非你最终在你的面具中使用渐变不透明度,否则这种方法会更好,因为它应该简化玩家必须执行的合成。