2013-01-17 150 views
0

我想要在柔性移动应用程序中运行几个AS3游戏。我把我的原创游戏放到一个单独的库中,然后将它添加到我的移动应用程序中。到现在为止还挺好。移动柔性应用程序的缩放问题

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

我开始了这样的游戏:

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

我尝试设置相同的缩放选项在我的MXML的阶段,但它不会改变任何东西。

任何想法?

谢谢。

+0

这可能是有益的分享,你已经设置了一个StageScaleMode的代码。它在MyGame的构造函数中吗?或者别的地方?你确定这段代码运行吗? – JeffryHouser

+0

在MyGame中,我将它设置为Added_to_stage 在我调用super()后的构造函数中; addEventListener(Event.ADDED_TO_STAGE,handleAddedToStage); handleAddedToStage调用另一个函数,它调用了callstage.scaleMode = StageScaleMode.SHOW_ALL; – jbassking

+0

这里有一些更多的信息。看起来我使用的背景图像会缩放,但其他图像不会。 我不知道是否有不同的阶段,也许他们不都是一样的 – jbassking

回答

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值,您可以使用功能手动计算scaleFactor。screenDPI为:

// 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