0

我是 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 等价物吗?他们对我来说看起来很骇人听闻。

4

1 回答 1

3

我认为您所描述的行为是由scaleFlash 的 HTML 嵌入中的参数引起的。通常,这默认为showAll,将 Flash 向上缩放以适应容器。

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

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 中(如果您想嵌入一些二进制数据,特别方便)。

于 2011-04-02T04:21:28.013 回答