FLV:如何阻止VideoPlayer与其包含的MovieClip一起缩放?

时间:2009-02-07 00:46:31

标签: flash actionscript flv

我正在swf中创建一个VideoPlayer对象,效果很好。我正在使用autoSize进行调整,这也很好。我试图这样做,以便当包含swf变大时,视频保持相同的大小。 swf实际上是从另一个闪存电影加载的,这是调整大小的地方。我是否可以设置VideoPlayer类或动画片段中的设置,使其与动画片段一起停止缩放?

谢谢!

2 个答案:

答案 0 :(得分:1)

我不相信你想要的确切方法会起作用。在我看来,MovieClip对象,它是一个DisplayObjectContainer,或扩展DisplayObjectContainer,使用复合设计模式,当它受到影响时,它的子节点会受到影响。考虑制作如下的动画片段:

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;
}

因此,只要我们影响main,我们就可以以自己的方式影响其他对象。同样的想法适用于舞台的大小调整。

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中抽象出来并相应地对其进行更改。

答案 1 :(得分:1)

不是我测试过它,但也许你可以在包含视频播放器的swf中为Event.RESIZE添加一个处理程序。然后做这样的事情:

private function onResize(e:Event):void
{
  childClip.scaleX = (scaleX != 0) ? (1 / scaleX) : 0;
  childClip.scaleY = (scaleY != 0) ? (1 / scaleY) : 0;
}