1

我在 swf 中创建了一个 VideoPlayer 对象,效果很好。我正在使用 autoSize 调整它的大小,这也很好。我正在努力做到这一点,以便当包含的 swf 变大时,视频保持相同的大小。swf 实际上是从另一个 Flash 电影加载的,这是调整大小的地方。VideoPlayer 类或movieclip 中是否有设置,我可以设置使其停止与movieclip 一起缩放?

谢谢!

4

2 回答 2

1

我不相信你想要的确切方法会奏效。在我看来,作为 DisplayObjectContainer 或扩展 DisplayObjectContainer 的 MovieClip 对象利用了复合设计模式,其中的子级在受到影响时会受到影响。考虑制作如下影片剪辑:

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

于 2009-02-11T21:06:54.807 回答
1

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

private function onResize(e:Event):void
{
  childClip.scaleX = (scaleX != 0) ? (1 / scaleX) : 0;
  childClip.scaleY = (scaleY != 0) ? (1 / scaleY) : 0;
}
于 2009-02-11T21:33:06.617 回答