BorderContainer как объект переднего плана - PullRequest
0 голосов
/ 13 сентября 2011

Я ищу способ, чтобы мой элемент 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"/>

Но контейнер продолжает оставаться в фоновом режиме, и все удаленное видео, которое отображается в «vid» (= id), находится вна переднем плане.Как я могу установить контейнер на передний план?тогда просто установка всего фона приложения сделает эту работу.

1 Ответ

0 голосов
/ 13 сентября 2011

Звучит как идеальный вариант использования Альфа-маски .

Попробуйте:

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
    }

Если вы в конечном итоге не используете градуированную непрозрачность в своей маске, этот метод будет предпочтительнее, поскольку он должен упростить компоновку, которую должен нести игроквне.

...