3

AS3のみを使用してFlash Builderでアプリケーションを開発しています(フレックスはありません)。Flex では、次のコードでアプリケーションの dpi を設定できます。

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

しかし、私はAS3のみを使用しています。実行時に (AS3 を使用して) アプリケーションの DPI を変更することはできないと読みましたが、プロジェクト設定、コンパイラ設定でこれを設定するにはどうすればよいですか、それとも別の方法がありますか?

また、デフォルトのアプリケーションの DPI 設定は何ですか?

ネットで見つからないので、ここで質問してください (フレックスベースのソリューションのみ)。

4

1 に答える 1

3

モバイルの DPI はハードウェアによって設定され、電話と画面に完全に依存します。Flex モバイルで applicationDPI を設定すると、アセットを自動的にスケーリングするように Flex に指示することになります。

自動スケーリング。開発者は、アプリケーションで applicationDPI プロパティを設定することにより、アプリケーションのターゲット DPI を指定することを選択できます。これが明示的に設定されている場合、開発者は、指定された DPI のデバイスで実行されているかのように、スキンとレイアウトを設定する必要があります。実行時に、デバイスの DPI が指定されたターゲット DPI と異なる場合、Flex はアプリケーション全体を自動的にスケーリングして、アプリケーションとそのコントロールのおおよその物理サイズを維持します。たとえば、アプリケーションが 160 DPI をターゲットにしている場合、240 DPI デバイスでは自動的に 1.5 倍にスケーリングされます。この機能を使用しない場合は、実行時にカスタム スキンとビュー レイアウトがさまざまなピクセル密度に適切に適応するようにする必要があります。 ソース

AS3 モバイル プロジェクトでは、これを自分で処理する必要があります。

を使用して現在の DPI を取得できCapabilities.screenDPIますが、後は​​アセットをスケーリングするための比率であると思います。これを行う 1 つの方法は、元のゲーム幅から始めることです。

 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 に答える