2011-05-12 65 views
0

至於爲Android編寫實時遊戲的一個自然組成部分打交道,我需要能夠支持在Android SDK文檔不同的屏幕分辨率,密度等有不同的屏幕

primary article ,我知道我應該爲我的遊戲中的每個位圖創建單獨的資源,以適應不同的屏幕密度;但我不太明白如何處理位置,速度等。

該文件說我應該在我的代碼中使用密度獨立單位,無論我使用明確的值。但是,這並不意味着我需要將絕對像素轉換爲密度獨立單位,每次使用,我使用明確的值?

例如,我正在使用高密度800x480顯示器開發遊戲(橫向)。現在,我很滿意每幀移動1個像素的精靈(之後增量時間等)。因此,這將是這樣的:

sprite.setVelocityX(1); 

如果我使用密度獨立的單元,如文檔建議,不會我必須做這樣的事情到處,我用一個明確的數字?

sprite.setVelocityX(convert(1)); 

public float convert(float value) 
{ 
    return value * getResources().getDisplayMetrics().density; 
} 

這種感覺就像我不理解這個正確...

+0

沒有想法,如果這有幫助,但iOS本身用點的概念處理。你用點來定義你的屏幕元素。然後,iOS將這些轉換爲像素。標準屏幕上1pt = 1px。在視網膜顯示屏上1pt = 4px。希望android可以提供這種類型的內置轉換(否則它聽起來像是一個PITA來處理) – 2011-05-12 01:34:22

回答

1

我在動畫沒有經驗,但是這涉及到我的頭上的第一個想法是定義一個單元作爲

static int UNIT = getResources().getDisplayMetrics().density; 

,然後用它作爲

sprite.setVelocityX(3*UNIT); // replaces sprite.setVelocityX(3); 

這樣,你一次創建一個int,避免查詢DisplayMetrics每次。這就是說,可能有OpenGL或者AndEngine機制直接獲得密度無關的值。

+0

呃,我想這真的是唯一的方法來做到這一點! – Jesse 2011-05-12 22:50:38

+0

@Jesse稱之爲'static int pt',然後你就可以得到DA對IOS的評論;) – Aleadam 2011-05-12 22:54:03