2011-10-28 33 views
0

這是我的第一篇文章,所以如果我在問我的問題時做了任何錯誤,我會提前道歉。我已經在網上看了一個特定的答案,但無法找到一個,所以這裏去.....瞭解DIP精靈移動/速度

我正在寫一個基於Surfaceview的遊戲,到目前爲止,一切進展順利,然而,我想移動我的主精靈,例如在160DPI屏幕上的1個像素作爲基線(因此基本上1個DIP是1像素= 1的DIP在160DPI屏幕上是否正確?)

我正在使用使用以下forumla:

private static final float spritemovestep = 1f; 
final float scale = getResources().getDisplayMetrics().density; 
MoveX = (int) (spritemovestep * scale + 0.5f); 

然後......類似

SpriteX=SpriteX+MoveX 

第一個問題 - 這是正確的嗎?

如果是,有人可以解釋+ .05f實際上是什麼,我讀過,這是爲「四捨五入到最接近的數字」,但....

如果spritemovestep = 1,則在一個120DPI屏幕(它返回0.75作爲我認爲的規模),它可以作爲:1 x .75 + .5?這將是1.25?那麼.5是什麼?

當它被轉換爲int值時結果是什麼?

在某些情況下,最終結果在低密度屏幕上似乎爲'0',所以精靈根本不動。

另外一些應該以不同速度移動的精靈正以相同的速度在一定的密度下移動。

我敢肯定我在這裏很愚蠢,缺少一些東西,但我不明白這應該如何工作。如果我想通過MDPI屏幕上的1個DIP /物理像素來移動我的精靈,它在LDPI屏幕上的移動方式不到1個像素?

此外,什麼是這個公式我不斷看到:

px = dp * (dpi/160) - When is this used? 

會很感激,如果有人能夠回答我的問題。

感謝所有

回答

1

的+ 0.5F是四捨五入到最接近的nukber,如你所說。理想情況下,當數字按ldpi縮小時,1的值爲0.75,當投射到int時,表示爲小於1或〜= 0。通過添加舍入數字,這個數字被提高到1.25,當作爲int產生時產生< 2或〜= 1。這樣,你的精靈應該以最小的移動1來繪製。以不同的速度移動的精靈的移動速度相同的唯一原因是,如果它們非常接近,那麼當它們變圓時,它們使用縮放比例變成相同的大小你給了。總之,你的方程與其他方法非常相似。我正在製作一款遊戲,爲我工作的公司使用Surfaceview遊戲,雖然我無法詳細瞭解代碼,但您的問題是我一直努力爭取的。我不知道你的物理更新如何,但也許這是你應該檢查的東西,具體來說,它是如何計數你的遊戲計時器。這可能是因爲你的應用程序正在讀取它的嘀嗒聲,因爲它們靠得太近,無法達到將投影后的1.25或1移動到int的點,因此你的精靈看起來不會移動。我簡要地經歷了這個問題,起初看着我的速度,直到我發現錯誤出現在計時器中。我注意到的另一件事是你的算法收集密度。在mdpi設備上,這是否返回1或160?這可能會產生很大的差異,但我不確定,因爲我使用的方程是不同的。您找到的另一個公式是android.developer.com開發指南中列出的等式的一個釋義,用於描述os如何將像素轉換爲傾角。人們傾向於引用這個共振,就是提供一個參考來幫助他人構建自己的適合他們應用程序的jeeds的縮放算法。希望這會有所幫助,因爲這是我現在可以給出的最佳答案。對不起,輸入錯誤,即時通訊從我的手機發送這個