2011-10-28 36 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的缩放算法。希望这会有所帮助,因为这是我现在可以给出的最佳答案。对不起,输入错误,即时通讯从我的手机发送这个