Java 碰撞后检测球的方向

Java 碰撞后检测球的方向,java,android,collision,Java,Android,Collision,我正在构建一个简单的Android游戏。 我一直在探测两个球碰撞的方向。 我有一个移动球a,和一个固定球B。 球A比球B小得多 我不在乎两个球的质量。两个球碰撞后,球B消失,球A改变方向 我想要这样的东西 这是我目前的代码: private void collision(Ball a, Ball b){ if(b.isVisible){ double d = Math.sqrt((a.cx - b.cx)*(a.cx - b.cx) + (a.cy -

我正在构建一个简单的Android游戏。 我一直在探测两个球碰撞的方向。 我有一个移动球a,和一个固定球B。 球A比球B小得多

我不在乎两个球的质量。两个球碰撞后,球B消失,球A改变方向

我想要这样的东西

这是我目前的代码:

private void collision(Ball a, Ball b){
        if(b.isVisible){
            double d = Math.sqrt((a.cx - b.cx)*(a.cx - b.cx) + (a.cy - b.cy)*(a.cy - b.cy));

            if(d <= a.radius + b.radius) {
                b.isVisible = false;
                if(a.dx * b.dx < 0 && a.dy * b.dy < 0){
                    a.dx = - a.dx;
                    a.dy = - a.dy;
                    b.dx = - b.dx;
                    b.dy = - b.dy;
                } else if(a.dx * b.dx < 0){
                    a.dx =- b.dx;
                    a.dx = - b.dx;
                } else if(a.dy * b.dy < 0){
                    a.dy = - a.dy;
                    b.dy = - b.dy;
                } else{
                    a.dx = - a.dx;
                    a.dy = - a.dy;
                    b.dx = - b.dx;
                    b.dy = - b.dy;
                }
            }

        }

    }
private void碰撞(球a、球b){
如果(b.isVisible){
双d=数学sqrt((a.cx-b.cx)*(a.cx-b.cx)+(a.cy-b.cy)*(a.cy-b.cy));

如果(d我可以为你的案例提供一些指导,而不必钻研方程

你想要达到的目标的重要方面是运动球的接触点和方向(注意你的情况是一种假设,因为两个球的质量和速度通常都很重要)

您可以在两个球之间的接触点绘制一条假想切线,并将其视为反射面。记住这一点,您可以计算给定移动球方向的反射角().

我想你的意思是要计算方向。既然“b”将消失,为什么不把它从代码中去掉。你需要计算A撞击b的角度,因为它与该角度垂直,它将反弹。