这个把我难住了。我不知道到底是什么导致了这个问题,但我会尽力提供尽可能多的相关信息。有问题请追问。
advance()
方法大约每 0.0025 秒调用一次,这也是 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);
}
它根本不动。
有什么想法吗?我被难住了!
最佳答案
这是因为矩形坐标存储为整数,因此它们每次只能至少更改 1。由于绘制运行如此频繁,当向左移动时,它仍然移动得非常快,因为它不能一次移动小于 1 个像素。
它根本不向右移动的原因是四舍五入。当转换为 int 时, double 向下舍入。因此,如果你的位置是 5,并且你尝试添加 0.00001,然后将其转换为 int,那么你的位置最终仍然是 5。如果你要减去 0.000001,那么它会向下舍入到 4,这就是移动的原因左边有效。
关于java - 向左移动太快,根本不向右移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22057529/