尝试更改屏幕边缘的速度不起作用



结果应该只是在屏幕边缘引起反弹效果,但对象左右抽搐,但不会像向右移动那样向左移动......

这是移动矩形的方法;(这里的输入与 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);
}

最新更新