我在 swf 中创建了一个 VideoPlayer 对象,效果很好。我正在使用 autoSize 调整它的大小,这也很好。我正在努力做到这一点,以便当包含的 swf 变大时,视频保持相同的大小。swf 实际上是从另一个 Flash 电影加载的,这是调整大小的地方。VideoPlayer 类或movieclip 中是否有设置,我可以设置使其停止与movieclip 一起缩放?
谢谢!
我在 swf 中创建了一个 VideoPlayer 对象,效果很好。我正在使用 autoSize 调整它的大小,这也很好。我正在努力做到这一点,以便当包含的 swf 变大时,视频保持相同的大小。swf 实际上是从另一个 Flash 电影加载的,这是调整大小的地方。VideoPlayer 类或movieclip 中是否有设置,我可以设置使其停止与movieclip 一起缩放?
谢谢!
我不相信你想要的确切方法会奏效。在我看来,作为 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 中抽象出来并相应地对其进行更改。
并不是说我已经测试过了,但也许你可以在包含视频播放器的 swf 中为 Event.RESIZE 添加一个处理程序。然后做这样的事情:
private function onResize(e:Event):void
{
childClip.scaleX = (scaleX != 0) ? (1 / scaleX) : 0;
childClip.scaleY = (scaleY != 0) ? (1 / scaleY) : 0;
}