2

FlexモバイルカードゲームでapplicationDPIを使用しています。

<?xml version="1.0" encoding="utf-8"?>
<s:ViewNavigatorApplication 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark"
    firstView="views.Menu"
    applicationDPI="160"
    initialize="init()">

    <fx:Style source="Preferans.css" />

    <fx:Script>
        <![CDATA[
            import spark.core.ContentCache;
            public static const AVATAR_CACHE:ContentCache = new ContentCache();

            public static var SCALE:Number;

            public function init():void {
                SCALE = runtimeDPI / applicationDPI;
            }   
        ]]> 
    </fx:Script>
</s:ViewNavigatorApplication>

そして、それに基づいて3つの異なる解像度でアセットを提供します。

<fx:Declarations>
    <s:MultiDPIBitmapSource id="BACK"
        source160dpi="@Embed('assets/icons/low-res/back.png')"
        source240dpi="@Embed('assets/icons/mid-res/back.png')"
        source320dpi="@Embed('assets/icons/high-res/back.png')"/>
</fx:Declarations>

それでも、たとえばFlash Builder 4.6でiPadエミュレーターを選択すると、結果は良く見えません。

ここに画像の説明を入力してください

Google Nexus Oneを選択すると、より良い結果が得られます。

ここに画像の説明を入力してください

ここで何をすべきか、電話とタブレットデバイスの検出に何を使用するのですか?

画面の解像度を確認しても、ここでは役に立ちません。上記のiPadの例(低解像度ですが大画面)を参照してください。

4

2 に答える 2

6
  public static function get isTablet():Boolean  
    { 

       var deviceWidth:Number = Capabilities.screenResolutionX / Capabilities.screenDPI;

       var deviceHeight:Number = Capabilities.screenResolutionY / Capabilities.screenDPI;

       var diagonalInches:Number = Math.sqrt((deviceWidth * deviceWidth)+ (deviceHeight *    deviceHeight));
      if(diagonalInches>=7)
          return true;
      else
          return false;
    }
于 2013-07-18T09:13:15.450 に答える
3

私が仕事のために行ったプロジェクトでは、まったく同じ問題を評価する必要がありました。そのために、デバイスを評価していくつかの決定を行うアプリinitで実行される新しいクラスを作成しました。

基本的に、私はこれをしました

var deviceWidth:Number = Capabilities.screenResolutionX / Capabilities.screenDPI;
var deviceHeight:Number = Capabilities.screenResolutionY / Capabilities.screenDPI;

これにより、ほとんどのデバイスでデバイスの幅と高さがわかります。ただし、screenDPIプロパティは常に正確であるとは限らないため、これが100%機能するとは限りません。それは十分な頻度で機能しますが、問題ではないと思います。

そこから、私はいくつかの研究をしました。私は、電話が電話ではなくなり、タブレットになり始めたその時点を見つけました。標準的なアプローチはないので、私は見つけた中で最も人気のないタブレットを選び(当時、BlackberryPlaybookまたはKindleFireはどちらかを思い出せません)、その画面のサイズを携帯電話とタブレットの間のブレークポイントとして使用しました。

if ( deviceWidth >= fireWidth && deviceHeight >= fireHeight ) {
    isTablet = true;
}
else {
    isPhone = true;
}

それは明らかに擬似コードですが、あなたはその考えを理解します。また、各プラットフォーム(iOS、Android、デスクトップ)を区別するためにいくつかのチェックを入れ、iOSの場合は、デバイスのフィールドが限られているため、タブレットか電話かを手動で設定しました。

そこから、2つのインターフェースがありました。1つは電話用、もう1つはタブレット用です。addedToStage Applicationクラスの関数では、isPhoneisTabletチェックを使用して、ロードするインターフェイスを選択しました。

おそらくそれがどのように行われるべきかではなく、またそれはばかげた証拠でもありません。残念ながら、私が知る限り、これはAdobeAIRのデバイス固有のインターフェイスを備えたユニバーサルアプリケーションに最も近いものです。

于 2012-11-02T22:46:55.587 に答える