3

我在 Flash Builder 中仅使用 AS3 开发应用程序(没有 flex 东西)。在 flex 中,可以通过以下代码设置应用程序的 dpi:

<s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
   xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="320">

但我只使用 AS3。我已经读到无法在运行时更改应用程序的 DPI(使用 AS3),但是如何在项目设置、编译器设置中进行设置,或者有其他方法吗?

另外,默认应用程序的 DPI 设置是什么?

在这里问它,因为在网上找不到它(仅基于 flex 的解决方案)。

4

1 回答 1

3

手机上的DPI是由硬件设置的,完全取决于手机和屏幕。当您在 Flex 移动设备中设置 applicationDPI 时,您是在告诉 Flex 自动缩放您的资源。

自动缩放。开发人员可以通过在应用程序上设置 applicationDPI 属性来选择为其应用程序指定目标 DPI。明确设置后,开发人员应该设置他们的皮肤和布局,就好像他们在给定 DPI 的设备上运行一样。在运行时,如果设备的 DPI 与指定的目标 DPI 不同,Flex 将自动缩放整个应用程序以保留应用程序及其控件的大致物理大小。例如,如果应用程序的目标是 160 DPI,它会在 240 DPI 设备上自动缩放 1.5 倍。如果您选择不使用此功能,则需要确保您的自定义皮肤和视图布局在运行时正确适应不同的像素密度。 来源

在 AS3 移动项目中,您需要自己处理。

您可以使用当前的 DPI,Capabilities.screenDPI但我认为您可能追求的是一个比例来扩展您的资产。一种方法是从原始游戏宽度开始。

 private static const WIDTH:Number = 1024;

然后,您可以使用

 var ratio:Number = stage.fullScreenWidth / WIDTH;

并将其应用于您的资产

myBitmap.scaleX = myBitmap.scaleY = ratio;

现在这不会考虑设备的旋转,因此 fullScreenWidth/Height 可能会翻转。要检查你将需要做这样的事情

if (stage.fullScreenWidth > stage.fullScreenHeight){
  //portrait 
} else {
  //landscape
}

希望这会有所帮助

于 2012-05-17T22:59:52.933 回答