如何使用Actionscript可靠地捕获屏幕分辨率?

时间:2009-09-16 00:03:32

标签: php javascript actionscript monitor resolution

我有几个组件的屏幕位置取决于浏览器所在的显示器的分辨率。

loginBox.x =(flash.system.Capabilities.screenResolutionX - loginBox.width)/ 2; loginBox.y =(flash.system.Capabilities.screenResolutionY - loginBox.height)/ 2;

我遇到的问题是flash.system.Capabilities方法提取附加到计算机的主监视器的分辨率。在大多数情况下,这不是问题,但在我的一台计算机上,我有1680x1050和1440x900。在工作中,我有一个1920x1200和一个1680x1050,所以如果我在较小的显示器上的浏览器中打开页面,事情不会居中,我的工具面板完全偏离屏幕右侧。

我有一块javascript我试过,无论是在html还是通过php,但问题是,如果我使用httpRequest或urlLoader来获取html文件,我会得到html的来源,如果我尝试了php脚本,我得到一个试图写cookie的脚本块。如果在加载Flash网站之前没有访问过该页面,或者如果禁用了cookie,那么它永远不会被写入,我就无处可去。

我是否可以使用不依赖于cookie的方法来检测浏览器实际启用的显示器的分辨率,而不仅仅是第一台显示器的分辨率?

2 个答案:

答案 0 :(得分:1)

为什么不使用stage.stageWidth和stage.stageHeight进行定位?

编辑: 好的,这是一个例子。 我在考虑你将这个代码放在loginBox所在的容器中。 除非您的对象被添加到DisplayList,否则stage属性是未定义的,因此您需要监听它何时被添加,然后定位loginBox。

// in the constructor
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

然后

private function onAddedToStage(evt:Event) {
    loginBox.x = (stage.stageWidth - loginBox.width)/2;
    loginBox.y = (stage.stageHeight - loginBox.height)/2;
}

此外,如果您将stage scaleMode设置为noScale(可能就是这种情况),如果您需要根据浏览器大小调整不断重新定位loginBox,则需要收听Event.RESIZE事件

stage.addEventListener(Event.RESIZE, onResize);

答案 1 :(得分:0)

如果您尝试在Flash和javascript之间进行通信,ExternalInterface是可行的方法。而是写一个cookie,只需从javascript中获取信息,然后通过回调将其发送到flash。