在以前的 Flash 版本中,进入全屏模式会将舞台的高度和宽度增加到屏幕的尺寸。现在硬件缩放已经到来,高度和宽度设置为视频的尺寸(如果纵横比不同,则加上边框)。
没关系,除非您在视频上放置了控件。以前,你可以控制它们的大小;但是现在它们被放大了与视频相同的比例,并且像素化得可怕。控件很丑,字幕不可读。
用户可以关闭硬件缩放,但实现的只是关闭抗锯齿。控件仍然被炸得丑陋。
有没有办法恢复旧的缩放行为?
在以前的 Flash 版本中,进入全屏模式会将舞台的高度和宽度增加到屏幕的尺寸。现在硬件缩放已经到来,高度和宽度设置为视频的尺寸(如果纵横比不同,则加上边框)。
没关系,除非您在视频上放置了控件。以前,你可以控制它们的大小;但是现在它们被放大了与视频相同的比例,并且像素化得可怕。控件很丑,字幕不可读。
用户可以关闭硬件缩放,但实现的只是关闭抗锯齿。控件仍然被炸得丑陋。
有没有办法恢复旧的缩放行为?
这是解决它的另一种方法,它更简单,而且对我来说似乎效果很好。
myFLVPlayback.fullScreenTakeOver = false;
该fullScreenTakeOver
属性是在 Flash Player 9 update 3中引入的。文档都有点模糊,但这里有更多信息:
我终于找到了这个问题的答案。问题是 FLVPlayback 组件现在使用 stage.fullScreenSourceRect 属性进入硬件缩放的全屏模式。当它这样做时,它会拉伸 stage.fullScreenSourceRect 给定的渲染区域以填充屏幕,而不是增加舞台或任何组件的大小。
要阻止它,您必须创建一个使用 UIManager 子类的 FLVPlayback 子类,并覆盖设置 stage.fullScreenSourceRect 的函数。不利的一面是,您失去了硬件扩展性;但从好的方面来说,你的播放器看起来不像是一个三岁的孩子用蜡笔画的。
CustomFLVPlayback.as:
import fl.video.*;
use namespace flvplayback_internal;
public class CustomFLVPlayback
{
public function CustomFLVPlayback()
{
super();
uiMgr = new CustomUIManager(this);
}
}
CustomUIManager.as:
import fl.video.*;
import flash.display.StageDisplayState;
public class CustomUIManager
{
public function CustomUIManager(vc:FLVPlayback)
{
super(vc);
}
public override function enterFullScreenDisplayState():void
{
if (!_fullScreen && _vc.stage != null)
{
try
{
_vc.stage.displayState = StageDisplayState.FULL_SCREEN;
} catch (se:SecurityError) {
}
}
}
}
我们使用动作脚本将 FLVPlayback 添加到我们的电影中,所以我们只需要替换
var myFLVPLayback:FLVPlayback = new FLVPlayback();
和
var myFLVPLayback:CustomFLVPlayback = new CustomFLVPlayback();
我不知道是否有办法使自定义类在组件库中可用。
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE, onStageResize);
function onStageResize(event:Event):void {
//do whatever you want to re-position your controls and scale the video
// here's an example
myFLVPlayback.width = stage.stageWidth;
myFLVPlayback.height = stage.stageHeight - controls.height;
controls.y = stage.stageHeight - controls.height;
}
或者,我对此并不完全确定,您可以尝试在 FLVPlayback 上进行一些 9 切片缩放,但我不知道这是否可行。