设置舞台属性(视频窗口全屏示例)
2012-02-06 12:12:30 来源:本站整理Stage 类用于覆盖 DisplayObject 类的大多数属性和方法。如果调用其中一个已覆盖的属性或方法, Flash Player 会引发异常。例如, Stage 对象不具有 x 或 y 属性,因为作为应用程序的主容器,该对象的位置是固定的。x 和 y 属性是指显示对象相对于其容器的位置,由于舞台没有包含在其它显示对象容器中,因此这些属性不适用。
控制回放帧速率
Stage 类的 framerate 属性用于设置加载到应用程序中的所有 SWF 文件的帧速率。
控制舞台缩放比例
当调整 Flash Player 屏幕的大小时,Flash Player 会自动调整舞台内容来加以补偿。Stage类的 scaleMode 属性可确定如何调整舞台内容。此属性可以设置为四个不同值,如flash.display.StageScaleMode 类中的常量所定义。
对于 scaleMode 的三个值(StageScaleMode.EXACT_FIT、StageScaleMode.SHOW_ALL 和StageScaleMode.NO_BORDER), Flash Player 将缩放舞台的内容以容纳在舞台边界内。三个选项在确定如何完成缩放时是不相同的。
■ StageScaleMode.EXACT_FIT 按比例缩放 SWF。
■ StageScaleMode.SHOW_ALL 确定是否显示边框(就像在标准电视上观看宽屏电影时显示的黑条)。
■ StageScaleMode.NO_BORDER 确定是否可以部分裁切内容。
或者,如果将 scaleMode 设置为 StageScaleMode.NO_SCALE,则当查看者调整 Flash Player窗口大小时,舞台内容将保持定义的大小。仅在缩放模式中, Stage 类的 width 和 height属性才可用于确定 Flash Player 窗口调整大小后的实际像素尺寸。(在其它缩放模式中,stageWidth 和 stageHeight 属性始终反映的是 SWF 的原始宽度和高度。)此外,当scaleMode 设置为 StageScaleMode.NO_SCALE 并且调整了 SWF 文件大小时,将调度 Stage类的 resize 事件,允许您进行相应地调整。
因此,将 scaleMode 设置为 StageScaleMode.NO_SCALE 可以更好地控制如何根据需要调整屏幕内容以适合窗口大小。例如,在包含视频和控制栏的 SWF 中,您可能希望在调整舞台大小时控制栏的大小保持不变,而仅更改视频窗口大小以适应舞台大小的更改。以下示例中演示了这一点:
- // videoScreen 是一个包含视频的显示对象(例如,视频实例)
- // ;它位于舞台左上角,并且
- // 在调整 SWF 大小时其大小也应调整。
- // controlBar 是一个包含多个按钮的显示对象(例如, Sprite),
- // 它应位于舞台(在 videoScreen 的下方)的左下角,
- // 在调整 SWF 大小时其大小将不会
- // 调整。
- import flash.display.Stage;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.events.Event;
- var swfStage:Stage = videoScreen.stage
- swfStage.scaleMode = StageScaleMode.NO_SCALE;
- swfStage.align = StageAlign.TOP_LEFT;
- function resizeDisplay(event:Event):void
- {
- var swfWidth:int = swfStage.stageWidth;
- var swfHeight:int = swfStage.stageHeight;
- // Resize the video window.
- var newVideoHeight:Number = swfHeight - controlBar.height;
- videoScreen.height = newVideoHeight;
- videoScreenvideoScreen.scaleX = videoScreen.scaleY;
- // Reposition the control bar.
- controlBar.y = newVideoHeight;
- }
- swfStage.addEventListener(Event.RESIZE, resizeDisplay);
处理全屏模式
使用全屏模式可令 SWF 填充查看器的整个显示器,没有任何边框、菜单栏等。Stage 类的
displayState 属性用于切换 SWF 的全屏模式。可以将 displayState 属性设置为由
flash.display.StageDisplayState 类中的常量定义的其中一个值。要打开全屏模式,请将
displayState 设置为 StageDisplayState.FULL_SCREEN:
// mySprite 是一个 Sprite 实例,已添加到显示列表中
mySprite.stage.displayState = StageDisplayState.FULL_SCREEN;
要退出全屏模式,请将 displayState 属性设置为 StageDisplayState.NORMAL:
mySprite.stage.displayState = StageDisplayState.NORMAL;
此外,用户可以通过将焦点切换到其它窗口或使用以下组合键之一来选择退出全屏模式:Esc (所有平台)、Ctrl-W (Windows)、Command-W (Mac) 或 Alt-F4 (Windows)。
全屏模式的舞台缩放行为与正常模式下的相同;缩放比例由 Stage 类的 scaleMode 属性控制。
通常,如果将 scaleMode 属性设置为 StageScaleMode.NO_SCALE,则 Stage 的 stageWidth 和
stageHeight 属性将发生更改,以反映由 SWF 占用的屏幕区域的大小(在本例中为整个屏幕)。
打开或关闭全屏模式时,可以使用 Stage 类的 fullScreen 事件来检测和响应。例如,进入或退出全屏模式时,您可能需要重新定位、添加或删除屏幕中的项目,如本例中所示:
- import flash.events.FullScreenEvent;
- function fullScreenRedraw(event:FullScreenEvent):void
- {
- if (event.fullScreen)
- {
- // 删除输入文本字段。
- // 添加关闭全屏模式的按钮。
- }
- else
- {
- // 重新添加输入文本字段。
- // 删除关闭全屏模式的按钮。
- }
- }
- mySprite.stage.addEventListener(FullScreenEvent.FULL_SCREEN,
- fullScreenRedraw);
正如此代码所示,fullScreen 事件的事件对象是 flash.events.FullScreenEvent 类的实例,它包含指示是启用 (true) 还是禁用 (false) 全屏模式的 fullScreen 属性。在 ActionScript 中处理全屏模式时,需要记住以下注意事项:
■ 只能通过 ActionScript 响应鼠标单击(包括右键单击)或按键才能启动全屏模式。
■ 对于有多个显示器的用户,SWF 内容将展开且只填充一个显示器。Flash Player 使用度量信息来确定哪个显示器包含 SWF 的最大部分内容,然后使用该显示器提供全屏模式。
■ 对于 HTML 页中嵌入的 SWF 文件,嵌入 Flash Player 的 HTML 代码必须包括名为
allowFullScreen 且值为 true 的 param 标签和 embed 属性,如下所示:
<object>
...
<param name="allowFullScreen" value="true" />
<embed ... allowfullscreen="true" />
</object>
如果要在网页中使用 JavaScript 来生成 SWF 嵌入标签,则必须更改 JavaScript 以添加allowFullScreen param 标签和属性。例如,如果 HTML 页使用 AC_FL_RunContent()函数(由 Flex Builder 和 Flash 生成的 HTML 页使用) ,则应在该函数调用中添加allowFullScreen 参数,如下所示:
AC_FL_RunContent(
...
'allowFullScreen','true',
...
); //end AC code
这不适用于在独立 Flash Player 中运行的 SWF 文件。
■ 在全屏模式下将禁用所有与键盘有关的 ActionScript,如 TextField 实例中的键盘事件和文本输入。用于关闭全屏模式的键盘快捷键除外。还有其它几个需要了解的与安全有关的限制。
更多精彩
赞助商链接