我的应用程序只是一个来自FlashDevelop的AIR Mobile AS3项目模板,包括application.xml文件和Main类。
在Main类中,我使用stage.contentsScaleFactor
值创建了一个文本字段,并在第一个Event.RESIZE
之后显示文本。
var textField:TextField = new TextField();
textField.appendText("Size: " + stage.stageWidth + " x " + stage.stageHeight + "\n");
textField.appendText("Scale: " + stage.contentsScaleFactor + "\n");
addChild(textField);
我的iPhone支持视网膜屏幕,我得到了:
尺寸: 960 x 640
比例: 1
用于:
<requestedDisplayResolution>high</requestedDisplayResolution>
并且
尺寸:480 x 320
缩放比例:1
适用于
<requestedDisplayResolution>standard</requestedDisplayResolution>.
iPad的情况几乎相同,
尺寸:2048 x 1536
缩放比例:1
对于高清,以及
尺寸:1024 x 768
缩放比例:1
对于标准。
我正在使用最新的AIR SDK 18.0.0.142(beta)进行编译,-swf-version=29
。发布版AIR SDK 18的结果相同。
对于AIR 14 SDK和-swf-version=25
,我得到一些垃圾值作为大小(看起来像我的swf宽度和高度乘以contentsScaleFactor
),但contentsScaleFactor
仍为1
。
编辑:
我遇到了各种问题,这些问题在网络上提到了contentsScaleFactor
(例如这个)。他们声称,在Retina显示屏上,contentsScaleFactor
应该是2。
这就是这个属性的文档:
指定舞台的有效像素缩放因子。在标准屏幕上,此值通常为1,在HiDPI(即Retina)屏幕上,此值为2。当在HiDPI屏幕上渲染舞台时,像素分辨率加倍;即使将舞台缩放模式设置为StageScaleMode.NO_SCALE。 Stage.stageWidth和Stage.stageHeight仍然以经典像素单位报告。注意:此值可以根据舞台是否在HiDPI或标准屏幕上而动态更改。
此外,使用
<requestedDisplayResolution>standard</requestedDisplayResolution>
即使我使用
wantsBestResolution
设置为true
的configureBackBuffer
,在iPad上仍然得到1024*768的缓冲区。我通过在128*128四边形上绘制锐利的256*256纹理进行验证-结果模糊。然后我用相同的方式做了同样的事情。<requestedDisplayResolution>high</requestedDisplayResolution>
我得到了相同物理尺寸的清晰图像。
我的实际问题是:
- 在Retina iPad/iPhone上,`contentsScaleFactor`是否应该为2?如果是这样,我是否遗漏了一些编译器/打包器选项? - 我如何确定对于`requestedDisplayResolution=standard`,我的舞台是否被缩放? - 如果在移动设备上`contentsScaleFactor`不起作用,那么这个属性有什么用途?例如,在具有Retina显示屏的Mac上,它是否有效?
编辑2:
在具有Retina显示屏的Mac上,`contentsScaleFactor`可以正常工作,并报告为`2`。