2012-05-17 36 views
3

我在僅用AS3的Flash Builder中開發應用程序(沒有Flex東西)。在flex中可以通過以下代碼設置應用程序的dpi:在AS3移動應用程序中設置ApplicationDPI

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

但是我只使用AS3。我已經讀過,在運行時(使用AS3)不可能更改應用程序的DPI,但是如何在項目設置,編譯器設置中設置此值,還是有另一種方法可以執行此操作?

此外,什麼是默認應用程序的DPI設置?

問這裏,因爲無法在網上找到它(僅基於flex的解決方案)。

回答

3

手機上的DPI是由硬件設置的,它完全依賴於手機和屏幕。當您在Flex移動設備中設置applicationDPI時,您告訴Flex會自動擴展您的資產。

自動縮放。開發人員可以通過在應用程序上設置applicationDPI屬性來選擇爲其應用程序指定目標DPI。當明確設置這個時,開發者應該設置他們的皮膚和佈局,就好像他們在給定的DPI的設備上運行一樣。在運行時,如果設備與指定的目標DPI具有不同的DPI,則Flex將自動縮放整個應用程序以保留應用程序及其控件的近似物理大小。例如,如果應用程序的目標是160 DPI,則它將在240 DPI設備上自動縮放1.5倍。如果您選擇不使用此功能,則需要確保您的自定義外觀和視圖佈局在運行時適應不同的像素密度。 Source

在AS3移動項目,你會需要這個自己處理。

您可以使用Capabilities.screenDPI獲得當前的DPI,但我認爲您可能會追求的是通過擴展資產的比率。做到這一點的一種方法是從原始遊戲寬度開始。

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 
} 

希望這有助於

+0

謝謝你的非常有用的信息!這導致了一個解決方案。但是,你能告訴我如何避免圖像中的模糊像素?我無法使用SVG/FXG。即使當我使用大圖像時,它看起來也很糟糕。 – Codebeat

+0

@Erwinus您可以嘗試在您的位圖上將平滑設置爲true。如果這不起作用,您可能需要不同的資產用於不同的屏幕DPI。看到這個URL,它是爲Flex的,但你可以使用as3方法http://help.adobe.com/en_US/flex/mobileapps/WS19f279b149e7481c682e5a9412cf5976c17-8000.html#WS19f279b149e7481c-6bd5f36412cc794cd7a-8000 – francis

+0

平滑到真正的伎倆!爲什麼在默認情況下不啓用? – Codebeat

相關問題