java - 盒子碰撞检测和弹跳

标签 java collision-detection bounce

我正在制作乒乓球,并且发现编写一个将球正确地从四堵墙上弹开的算法真的很困难(我稍后会处理得分问题,因为只有西边和东边的一部分会进球) 。所以现在我希望球在盒子周围弹跳。

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

这是我到目前为止所想到的:

        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 位于左上角。

最佳答案

您可以通过两种方式看待这个问题:

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

渐变:可能更简单。您必须每 t 毫秒以特定的 dY 和 dX 移动球。所以如果你碰壁了,你可以简单地使用 dY 和 dX 的反转符号。例如,如果你撞到了右边的墙,dX 就会变成 -dX,而 dY 会继续前进。

关于java - 盒子碰撞检测和弹跳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4550492/

相关文章:

java - jvm方法调用历史跟踪

java - 安卓 Canvas 。如何在随机位置设置圆圈?

css - 如何使用 PURE CSS 创建 CSS3 反弹效果

google-analytics - 实现Analytics(分析)自定义变量时出现问题(跳出率变为零)

java - Java从栈中返回数据

java - 如何使用java清除Selenium中的下拉菜单

java - 用java从其他项目导入类总是出错

java - JBox2D Body 曾经存在,现在为空?

ios - 当计数达到 0 时改变场景 Cocos2d 3.0