有人可以向我解释为什么这个ActionScript代码的行为是自动缩放的吗?

时间:2011-04-02 03:46:43

标签: actionscript-3 video window autoscalemode

我是AS3的新手,我正在为AIR做一些自定义视频播放器视频项目。当我研究如何播放视频的简单示例(非StageVideo)时,我遇到了一个独特的情况,我从Flash中获得了一个非常棒的自动缩放(拉伸到适合)窗口行为。

每当我设置SWF指令的宽度和高度等于我正在创建的flash.media.Video对象的宽度和高度时。它执行自动缩放,拉伸到适合,可调整大小的行为。像这样:

// SWF directive placed before the class declaration of the main class
[SWF( width="1024", height="576", backgroundColor="000000", visible="true" )]

// somewhere in my initialization
myvid = new Video();
with( myvid )
{
    x = 0;
    y = 0;
    width = 1024; // if I set this wxh equal to wxh in the SWF directive it auto-scales!
    height = 576;
}
myvid.attachNetStream( myns );
addChild( myvid ); // must come after instancing of video and netstream, and attach to make the auto-scale work
myvid.play( "somevideo.flv" );

即使我将宽度设置为16,将高度设置为9,也可以完全适合我的窗口大小。 有人可以解释一下这种行为吗?我在文档中读到的都没有提到这一点。

别误会我的意思,我喜欢这种行为! :)这让我的事情变得更轻松。但是代码方面我需要理解为什么会发生这种情况,因为我设置的代码与自动缩放无关。

另外,指令是什么?难道他们只是拥有相同的纯ActionScript 3吗?他们看起来很讨厌我。

1 个答案:

答案 0 :(得分:3)

我认为您描述的行为是由Flash嵌入的scale参数引起的。通常,这默认为showAll,将Flash缩放到适合容器的位置。

有两种不同的大小:容器的大小(HTML页面中的块)和Flash内容的大小(您在SWF标记中指定的大小)。缩放模式决定这些尺寸不匹配时的行为。您可以通过调整嵌入参数来控制此行为,也可以使用stage.scaleMode直接从AS3控制此行为:

import flash.display.StageScaleMode;
// scale the content to fit the container, maintaing aspect ratio
stage.scaleMode = StageScaleMode.SHOW_ALL;
// disable scaling
stage.scaleMode = StageScaleMode.NO_SCALE;

如果你想使用缩放模式,我会设置你的视频宽度以匹配舞台尺寸,如下所示:

myvid.width = stage.stageWidth;
myvid.height = stage.stageHeight;

这样就可以避免重复SWF的宽度和高度。

指令主要指定编译器的一些元数据或指令。 SWF标记特别指定SWF标题中的信息,例如所需的宽度,高度,帧速率。这些只是玩家+容器关于如何显示文件的一些建议。其中一些可以在代码中更改(stage.frameRate = 50;)。另一个元标记是Embed,它会将一些资产捆绑到SWF中(如果你想嵌入一些二进制数据,这将非常方便)。