我想在Flex移动应用中运行几款AS3游戏。我将原始游戏放入一个库中,然后将其添加到我的移动应用程序中。到目前为止一切都很好。
我得到的问题是游戏开始时它没有扩展到我在游戏中指定的StageScaleMode.SHOW_ALL。
我正在开始这样的游戏:
var game:MyGame = new MyGame();
var container:UIComponent = new UIComponent();
addElement(container);
container.addChild(game);
this.actionBarVisible = false;
我尝试在mxml中为舞台设置相同的缩放选项,但它不会改变任何内容。
有什么想法吗?
感谢。
答案 0 :(得分:1)
移动设备屏幕具有不同的屏幕密度或DPI(每英寸点数)。您可以将DPI值指定为160,240或320,具体取决于目标设备的屏幕密度。启用自动缩放时,Flex会优化显示应用程序的方式,以显示每个设备的屏幕密度。
例如,假设您将目标DPI值指定为160并启用自动缩放。当您在DPI值为320的设备上运行应用程序时,Flex会自动将应用程序缩放2倍。也就是说,Flex会将所有内容放大200%。
要指定目标DPI值,请将其设置为主应用程序文件中标记或标记的applicationDPI属性:
<s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
firstView="views.HomeView"
applicationDPI="160">
如果您选择不自动缩放应用程序,则必须根据需要手动处理布局的密度更改。
设备可以具有不同的屏幕尺寸或分辨率以及不同的DPI值或密度。
分辨率是像素宽度的高像素数:即设备支持的像素总数。
DPI是每平方英寸的点数:即设备屏幕上的像素密度。术语DPI可与PPI(每英寸像素)互换使用。
applicationDPI(如果已设置)指定应用程序的目标DPI。 Flex会自动应用比例因子以适应具有不同DPI值的其他设备。
Capabilities.screenDPI是当前设备的特定DPI值。
runtimeDPI类似于Capabilities.screenDPI。此值是当前设备DPI四舍五入到DPIClassification类(160,240和320 DPI)定义的常量之一。
如果您想知道当前屏幕上组件的实际尺寸(宽度和高度),您需要使用比例因子:
var scaleFactor:Number = runtimeDPI / applicationDPI;
var currentComponentSize:int =componentSize.height * scaleFactor;
如果您无法访问applicationDPI和runtimeDPI值,则可以使用Capabilities.screenDPI手动计算scaleFactor:
// Copy the applicationDPI setted in your application. ie:
var _applicationDPI:int = 160;
var _runtimeDPI:int;
if(Capabilities.screenDPI < 200)
_runtimeDPI = 160;
else if(Capabilities.screenDPI >=200 && Capabilities.screenDPI < 280)
_runtimeDPI = 240
else if (Capabilities.screenDPI >=280)
_runtimeDPI = 320;
var scaleFactor:Number = _runtimeDPI / _applicationDPI;
var currentComponentSize:int =componentSize.height * scaleFactor;