2012-11-02 72 views
2

我用applicationDPI在Flex移動紙牌遊戲:在Flex移動設備中開發時,手機和平板電腦之間的差異如何?

<?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生成器4.6在iPad模擬器:

enter image description here

在選擇谷歌Nexus One會產生更好的結果:

enter image description here

在這裏做什麼,用什麼檢測手機VS平板設備?

檢查屏幕分辨率在這裏沒有幫助 - 請參閱上面的iPad示例(低分辨率,但大屏幕)。

+0

還沒有使用的Flex移動,但我pressuming的[功能](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Capabilities。 HTML)類可以提供一些方便的信息,如'OS,screenResolutionX,screenResolutionY,screenDPI' –

+0

謝謝,但問題是**要尋找什麼**例如,當比較iPad與谷歌Nexus One?(請參閱上面的屏幕截圖) –

+0

手動設置ApplicationDPI會導致一些奇怪的問題;我強烈建議不要設置它。另外,我個人覺得DPI相關的代碼只能在設備上測試;模擬器將返回屏幕的DPI [通常爲72;我認爲]。我建議根據您可用的空間大小和定位您的元素 - 在這種情況下的卡片。 – JeffryHouser

回答

3

對於我爲工作所做的項目,我必須評估完全相同的問題。爲此,我創建了一個在app init上運行的新類,用於評估設備並做出一些決定。

從本質上講,我這樣做

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

這會給你的大部分設備的設備寬度和高度。然而,screenDPI屬性並不總是準確的,所以這不會100%的時間。但是,它經常工作,我不認爲這是一個問題。

從那裏,我做了一些研究。我發現電話停止作爲手機並開始成爲平板電腦的地步。沒有標準的方法,所以我選擇了我能找到的最小的流行平板電腦(當時,Blackberry Playbook或Kindle Fire,不記得哪個),並將該屏幕的尺寸用作手機和平板電腦之間的斷點。

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

這是僞代碼,顯然,但你明白了。我還投入了一些檢查來區分每個平臺(iOS,Android和桌面),如果它是iOS,我手動設置它是平板電腦還是手機,因爲那裏的設備數量有限。

從那裏,我有兩個接口。一個用於手機,一個用於平板電腦。在我的Application類的addedToStage函數中,我使用了isPhoneisTablet檢查來選擇要加載的接口。

可能不是它應該如何完成,也不是愚蠢的證明。不幸的是,就我所知,這是我們可以在Adobe AIR中使用特定於設備的接口實現通用應用程序的最接近的方法。

+0

+1;這太棒了;你有沒有機會分享你的全班?我敢打賭,這對很多人都有用。 (如果您可以將其捐贈給Apache Flex,則爲獎勵積分)。 – JeffryHouser

+1

對不起,我不能。它是爲一個商業項目而建造的。儘管如此,如果我有機會,我可以嘗試在本週末基於相同的概念將另一個概念扔在一起。 –

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; 
    } 
+0

感謝你對此... –

相關問題