使用移动Flex应用程序扩展问题

时间:2013-01-17 14:40:13

标签: flex flex-mobile

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

我得到的问题是游戏开始时它没有扩展到我在游戏中指定的StageScaleMode.SHOW_ALL。

我正在开始这样的游戏:

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

我尝试在mxml中为舞台设置相同的缩放选项,但它不会改变任何内容。

有什么想法吗?

感谢。

1 个答案:

答案 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;

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