正确定位(屏幕宽度和高度)
Proper positioning (Screen width & height)
这里有点迷路。我有两个电影剪辑。我想要一个在最左边(在用户将鼠标悬停在屏幕左侧之前无法触及)和一个在最右边。我试过 Screen, Capabilities, and stage.
我不知道为什么,但显然我的分辨率是 1536 x 864?
trace("Screen x = " + Capabilities.screenResolutionX); //Screen x = 1536
trace("Screen y = " + Capabilities.screenResolutionY); //Screen y = 864
我不想将原生 window 的位置设置为舞台的高度和高度与 screenResoltionX 和 Y 的差异,因为这个数字对我来说太离谱了。我正在使用当前分辨率为 1920 x 1080 的显示器。我唯一能想到的是我的笔记本电脑此时设置为仅在显示器上显示,主屏幕处于非活动状态,但 window 出现在我的显示器上,所以我假设它从我的显示器上获取值.. 并且我的笔记本电脑的屏幕没有接近那个奇怪的分辨率。有人知道这是从哪里来的吗?我以前从没见过这个。来自 stage.fullScreenWidth 和 stage.fullScreenHeight..
的相同数字 return
我正在使用 Adobe AIR 17.0 来构建它。用不透明的 window 构建它。舞台的当前大小设置为 1024 x 786。
编辑:我希望这些对象位于用户屏幕的边缘。我正在尝试获取代表用户屏幕整个边界的网格。
使用 Capabilities.screenResolutionX
和 Capabilities.screenResolutionY
时,它针对 主显示器 进行报告(因此,如果您有多个显示器,无论是哪个显示器您的应用程序已打开,它将报告主显示器的分辨率),并且仅在您的应用程序启动时报告(因此,如果您在应用程序启动后更改分辨率 Capabilities.screenResolutionX 将不会反映新的屏幕分辨率)。
这是文档中的引述:(强调我的)
This property does not update with a user's screen resolution and instead only indicates the resolution at the time Flash Player or an Adobe AIR application started. Also, the value only specifies the primary screen.
就您的目的而言,屏幕分辨率似乎无关紧要。只需使用 stage.stageWidth
和 stage.stageHeight
值,因为它们反映了您实际应用程序的边界,无论它在哪个显示器上,或者它是否是全屏、windowed 或缩放等
if(stage.mouseX < stage.stageWidth * 0.5){
//mouse is on the left hand side of the application.
}
编辑
根据您的评论,听起来您需要这样做:
当您的应用首次运行时,执行此操作以使其成为 responsive/liquid:
stage.align = StageAlign.TOP_LEFT
stage.scaleMode = StageScaleMode.NO_SCALE
然后 stage.stageWidth
和 stage.stageHeight
属性将反映实际 window 大小。
您可以通过以下代码将其最大化:
stage.nativeWindow.maximize();
您可以通过以下方式收听 window 尺码变化:
stage.addEventListener(Event.RESIZE, myResizeHandler);
function myResizeHandler(e:Event):void {
//stage.stageWidth & stage.stageHeight have changed
}
这里有点迷路。我有两个电影剪辑。我想要一个在最左边(在用户将鼠标悬停在屏幕左侧之前无法触及)和一个在最右边。我试过 Screen, Capabilities, and stage.
我不知道为什么,但显然我的分辨率是 1536 x 864?
trace("Screen x = " + Capabilities.screenResolutionX); //Screen x = 1536
trace("Screen y = " + Capabilities.screenResolutionY); //Screen y = 864
我不想将原生 window 的位置设置为舞台的高度和高度与 screenResoltionX 和 Y 的差异,因为这个数字对我来说太离谱了。我正在使用当前分辨率为 1920 x 1080 的显示器。我唯一能想到的是我的笔记本电脑此时设置为仅在显示器上显示,主屏幕处于非活动状态,但 window 出现在我的显示器上,所以我假设它从我的显示器上获取值.. 并且我的笔记本电脑的屏幕没有接近那个奇怪的分辨率。有人知道这是从哪里来的吗?我以前从没见过这个。来自 stage.fullScreenWidth 和 stage.fullScreenHeight..
的相同数字 return我正在使用 Adobe AIR 17.0 来构建它。用不透明的 window 构建它。舞台的当前大小设置为 1024 x 786。
编辑:我希望这些对象位于用户屏幕的边缘。我正在尝试获取代表用户屏幕整个边界的网格。
使用 Capabilities.screenResolutionX
和 Capabilities.screenResolutionY
时,它针对 主显示器 进行报告(因此,如果您有多个显示器,无论是哪个显示器您的应用程序已打开,它将报告主显示器的分辨率),并且仅在您的应用程序启动时报告(因此,如果您在应用程序启动后更改分辨率 Capabilities.screenResolutionX 将不会反映新的屏幕分辨率)。
这是文档中的引述:(强调我的)
This property does not update with a user's screen resolution and instead only indicates the resolution at the time Flash Player or an Adobe AIR application started. Also, the value only specifies the primary screen.
就您的目的而言,屏幕分辨率似乎无关紧要。只需使用 stage.stageWidth
和 stage.stageHeight
值,因为它们反映了您实际应用程序的边界,无论它在哪个显示器上,或者它是否是全屏、windowed 或缩放等
if(stage.mouseX < stage.stageWidth * 0.5){
//mouse is on the left hand side of the application.
}
编辑
根据您的评论,听起来您需要这样做:
当您的应用首次运行时,执行此操作以使其成为 responsive/liquid:
stage.align = StageAlign.TOP_LEFT
stage.scaleMode = StageScaleMode.NO_SCALE
然后 stage.stageWidth
和 stage.stageHeight
属性将反映实际 window 大小。
您可以通过以下代码将其最大化:
stage.nativeWindow.maximize();
您可以通过以下方式收听 window 尺码变化:
stage.addEventListener(Event.RESIZE, myResizeHandler);
function myResizeHandler(e:Event):void {
//stage.stageWidth & stage.stageHeight have changed
}