java - 碰撞检测无法正常工作

标签 java math trigonometry collision

好的,所以我的桨碰撞工作正常:

if(velo.y > 0){
            float t = ((position.y - radius) - paddle.position.y)/ velo.y;

            float ballHitX = position.x + velo.x * t;

            if(t <= 1.0){
                if(ballHitX >= paddle.position.x && ballHitX <= paddle.position.x + paddle.width){
                    velo.y = -velo.y;
                }
            }
        }

但我的墙壁碰撞不是。 (球在桨下时上升,不在桨下时下降)

if(velo.y < 0){
                float t = ((position.y - radius) - (wall[2].y + wall[2].height))/ velo.y;

                if(t <= 1.0){
                velo.y = -velo.y;
                }
            }

如何阻止此错误并使球从墙上弹起?

最佳答案

我的猜测是你把它翻转了两次。

if(wall) {
    velo = -velo;
}
if(paddle) {
    velo = -velo;
}

所以,当你做桨时,它是这样的:

am i hitting the wall? nope
am i hitting the paddle? yep! okay flip velocity

但是当你做你的墙时,它是这样的:

am i hitting the wall? yep! okay flip velocity
am i hitting the paddle? yep! okay flip velocity

因此,因为您同时满足这两个条件,所以它会翻转两次。

您需要确定是否已经翻转,以防止双重翻转。

关于java - 碰撞检测无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5481375/

相关文章:

Python:计算精度高达100万位的正弦/余弦

java - 从构造函数返回 ArrayList 的集合

java - MockMVC - 如何在没有 mockMvc 进行实际发布的情况下测试到端点的发布?

java - Hibernate缓存锁定错误

javascript - 如何根据 Javascript 中的动态网格大小生成网格坐标?

c - C语言%运算符和google计算器mod的区别

java - junit 的可执行 jar 文件

math - 如何缩小已知最小值和最大值的数字范围

c++ - 找不到 sin(double)、sin(double&)、cos(double)、cos(double&)

Python 数学模块毕业