FLV: Как остановить VideoPlayer от масштабирования вместе с содержащим MovieClip? - PullRequest
1 голос
/ 07 февраля 2009

Я создаю объект VideoPlayer в SWF, и это работает хорошо. Я измеряю это, используя autoSize, и это тоже отлично работает. Я пытаюсь сделать так, чтобы, когда содержащий SWF становится больше, видео остается того же размера. SWF на самом деле загружается из другого флэш-фильма, где происходит изменение размера. Есть ли настройка в классе VideoPlayer или в мувиклипе, которую я могу установить, чтобы остановить масштабирование вместе с мувиклипом?

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 февраля 2009

Не то чтобы я проверял это, но, возможно, вы могли бы добавить обработчик для Event.RESIZE в swf, который содержит видеоплеер. Затем сделайте что-то вроде этого:

private function onResize(e:Event):void
{
  childClip.scaleX = (scaleX != 0) ? (1 / scaleX) : 0;
  childClip.scaleY = (scaleY != 0) ? (1 / scaleY) : 0;
}
1 голос
/ 12 февраля 2009

Я не верю, что именно тот метод, который вы хотите, сработает. Мне кажется, что объект MovieClip, который является DisplayObjectContainer или расширяет DisplayObjectContainer, использует шаблон проектирования Composite, где на его дочерние элементы влияют, когда на него влияют. Подумайте о создании видеоролика, как показано ниже:

var mc:MovieClip = new MovieClip();
addChild(mc);

var mcChild:MovieClip = new MovieClip();
mc.addChild(mcChild);

Теперь, если вы перемещаете родительский элемент, mc, mcChild перемещает точное количество пикселей, сохраняя свои позиции "x" и "y", а также все остальные атрибуты.

При этом все, что вам нужно, - это разместить проигрыватель VideoPlayer на внешней стороне изменяемого размера видеоклипа. Вполне вероятно, что после изменения размера видеоклипа вам может понадобиться расположить видеопроигрыватель в том же относительном положении.

var mc:MovieClip = new MovieClip();
addChild(mc);

var vp:VideoPlayer = new VideoPlayer();
vp.x = mc.x + 10;
vp.y = mc.y + 10;
addChild(vp);

/**
 *If mc's registration point is "Top-Left" then adjustments aren't 
 *required because mc will span down and to the right, otherwise we
 *need to reposition the video.
 */
function resizeMovie(pWidth:Number, pHeight:Number):void
{
    mc.width = pWidth;
    mc.height = pHeight;

   adjustVideo();
}
function repositionMovie(pX:Number, pY:Number):void
{
    mc.width = pWidth;
    mc.height = pHeight;

   adjustVideo();
}
function adjustVideo():void
{
    //This is where we make sure of vp's positioning upon mc's change.
    vp.x = mc.x + 10;
    vp.y = mc.y + 10;
}

Таким образом, всякий раз, когда мы влияем на главное, мы можем воздействовать на другие объекты по-своему. Эта же идея работает с изменением размера сцены.

stage.addEventListener(Event.RESIZE, onStageResize);
function onStageResize():void
{
    //Make mc the size of the stage
    mc.width = stage.stageHeight;
    mc.height = stage.stageHeight;

    //Position video in relation to mc
    adjustVideo();
}

В конце концов, MovieClip настроен на настройку своих дочерних элементов относительно того, как настраивается сам. Как DisplayObjectContainer имеет смысл, что элементы внутри него определяются родителем (MovieClip), и для достижения того, что вы хотите, вам просто нужно абстрагировать видеопроигрыватель из swf и внести в него соответствующие изменения.

...