这个让我难过。我不知道究竟是什么导致了这个问题,但我会尽量提供尽可能多的相关信息。如果您有任何问题,请询问。
{0.00}秒约会调用advance()
方法,这也是elapsedTime
的值。
private int speed = 1;
public void advance(float elapsedTime) {
rectangle.x = (int) (rectangle.x - speed * elapsedTime);
}
即使我将速度设置为0.0000001,x坐标也会向左移动太快。但是,每当我试图将它移到右边时:
public void advance(float elapsedTime) {
rectangle.x = (int) (rectangle.x + speed * elapsedTime);
}
根本不动。
有什么想法吗?我很难过!
答案 0 :(得分:5)
这是因为矩形坐标存储为整数,因此它们一次只能更改1。由于绘图经常运行,当向左移动时,它仍然移动得非常快,因为它不能同时以小于1像素的速度移动。
它根本不向右移动的原因是因为四舍五入。当转换为int时,double会向下舍入。因此,如果您的位置为5,并且您尝试添加0.00001,然后将其转换为int,则您的位置最终仍为5.如果您要减去0.000001,那么它将向下舍入为4,这就是移动的原因在左边工作。