结果应该只是在屏幕边缘引起反弹效果,但对象左右抽搐,但不会像向右移动那样向左移动......
这是移动矩形的方法;(这里的输入与 if 语句中正在更改的"xVelocity"相同,它这样做是因为有多个对象(
public void moveX (float x) {
if(rectangle.right >= Constants.SCREEN_WIDTH || rectangle.left <= 0){
xVelocity = -xVelocity;
}
rectangle.left += x;
rectangle.right += x;
}
此方法仅应用于更新方法中的不同矩形,它们向右移动很好,但我不确定转身有什么问题。
考虑SCREEN_WIDTH
100、right
值 95 和 xVelocity
10。
现在打电话给moveX(xVelocity)
.
首先,xVelocity
保持不变,然后将right
递增到 105。
再次呼叫moveX(xVelocity)
。
xVelocity
更改为 -10,则right
递增到 115,因为参数x
为 +10。
再次呼叫moveX(xVelocity)
。
xVelocity
改回 +10,然后right
递减为 105,因为参数x
为 -10。
现在我们又回到了第一次调用之后的相同状态,因此您的块在屏幕边缘来回抖动。
为了防止这种情况,您可以使用:
if(rectangle.right >= Constants.SCREEN_WIDTH) {
xVelocity = -Math.abs(xVelocity);
} else if ( rectangle.left <= 0) {
xVelocity = +Math.abs(xVelocity);
}