2014-02-27 80 views
0

这一个让我难住。我不知道究竟是什么导致了这个问题,但我会尽力提供尽可能多的相关信息。请询问您是否有任何问题。向左移动得太快,根本没有向右移动

advance()方法被称为约每0.0025秒一次,这也是elapsedTime的值。

private int speed = 1; 

public void advance(float elapsedTime) { 
    rectangle.x = (int) (rectangle.x - speed * elapsedTime); 
} 

它的x坐标向左移动太快了,即使我把我的速度0.0000001。但是,每当我尝试将其移动到右侧时:

public void advance(float elapsedTime) { 
    rectangle.x = (int) (rectangle.x + speed * elapsedTime); 
} 

它根本不动。

任何想法?我很难过!

+0

在您的函数调用中编辑 –

+0

您可以发布调用'advance()'的代码吗? –

+0

在上面添加了它。 – Evorlor

回答

5

这是因为矩形坐标存储为整数,因此它们一次最多只能更改1。由于平局运行频繁,因此在向左移动时,移动速度仍然非常快,因为它无法一次移动到小于1个像素。

它完全没有向右移动的原因是因为四舍五入。在转换为int时,double向下舍入。因此,如果你的位置是5,并且你尝试加0.00001,然后将它转换为一个int,那么你的位置最终仍然是5.如果你减去0.000001,那么它将被舍入到4,这就是为什么移动到左边的作品。

+0

嗯,我喜欢你的想法。让我看看它 – Evorlor