小编典典

盒子碰撞检测和弹跳

java

我正在打乒乓球,发现很难编写一种算法来正确地使球从四壁弹回(我将在稍后处理得分,因为只有西+东双方会成为进球)。所以此刻,我希望球在盒子周围弹跳。

检测球是否撞到墙壁很容易,但是我在计算新角度时遇到了麻烦。

到目前为止,这是我想出的:

        if(dstY == 0) {
            // North wall
            if(angle < 90) {
                newAngle = angle + 90;
            } else {
                newAngle = angle - 90;
            }
        } else if(dstX == maxWidth) {
            // East wall
            if(angle < 90) {
                newAngle = angle + 270;
            } else {
                newAngle = angle + 90;
            }
        } else if(dstY == maxHeight) {
            // South wall
            newAngle = angle + 90;
        } else if(dstX == 1) {
            // West wall
            if(angle < 270) {
                newAngle = angle - 90;
            } else {
                newAngle = angle - 270;
            }
        }

这仅适用于大约一半的碰撞,并且看起来非常难看。我确信这应该非常简单,并且之前已经做过很多次了。

在我的代码中,dstX / dstY是X / Y目标坐标。X = 0和y = 0在左上方。


阅读 277

收藏
2020-11-30

共1个答案

小编典典

您可以通过两种方式查看:

角度:如果您知道球碰撞的角度,只需执行180-角度即可找到新角度。

渐变:可能更简单。您必须每t毫秒以一定的dY和dX移动球。因此,如果您碰壁,则可以简单地玩dY和dX的倒置符号。例如,如果您撞到右墙,则dX变为-
dX,而dY继续前进。

2020-11-30