0

我有几个想在 flex 移动应用程序中运行的 AS3 游戏。我将我的原始游戏放入一个库中,然后将其添加到我的移动应用程序中。到目前为止,一切都很好。

我遇到的问题是,当游戏开始时,它不会自行缩放到我在游戏中指定的 StageScaleMode.SHOW_ALL。

我开始这样的游戏:

var game:MyGame = new MyGame();
var container:UIComponent = new UIComponent();
addElement(container);
container.addChild(game);               
this.actionBarVisible = false;

我尝试在我的 mxml 中为舞台设置相同的比例选项,但它没有改变任何东西。

有任何想法吗?

谢谢。

4

1 回答 1

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;

http://www.francescoflorio.info/?p=234

于 2013-01-29T10:40:35.087 回答