Java的。碰撞后球分开并向不同方向移动

时间:2017-11-09 15:13:08

标签: java collision intersection

我有一个程序,我可以创建反弹的球。当两个球碰撞时,两个球应分成两个较小的球,开始向不同的方向移动。

这就是我处理碰撞的方法

public boolean intersects (Ball b) {
        double distance = Math.sqrt(Math.pow((this.x - b.x), 2) + Math.pow((this.y - b.y), 2));
        if (this.size / 2 + b.size / 2  >= distance && !(this.equals(b))) {
            return  true;
        } else return false;

我正在寻找一个想法,这将有助于决定在哪里放置较小的球,以便它们不会立即再次发生碰撞。我尝试了不同的动作,但它们最终都太靠近了,所以它们都开始分裂弹跳而变得混乱。

这是Ball类

public Ball(double x, double y, double size, double dx, double dy) {
    this.x = x;
    this.y = y;
    this.size = size;
    this.dx = dx;
    this.dy = dy;

要移动球,我会执行以下操作

b.x = b.x + b.dx;
b.y = b.y + b.dy;

在球碰撞的那一刻,我有两个球对象。我知道他们中心的坐标:xy,速度dx,它们沿着x轴移动,速度dy沿着y轴

我省略了处理视图的代码,因为我基本上需要一个解决方案,如何为4个球更改dxdyxy,所以他们都彼此远离,不要立即碰撞。

我真的不需要代码解决方案,而是一般的想法。

1 个答案:

答案 0 :(得分:0)

我想你可能有两个问题。首先,你的四个“新”球都是在碰撞点或附近开始的,你的碰撞探测器可能会立即将它们视为碰撞。要解决这个问题,您可以将“新”球标记为无法相互碰撞一个或两个碰撞探测器。我需要查看代码以提供更好的解决方案。

其次,你可能想要随机化四个“新”球的结果向量。只需为每个设置随机设置dx和dy,这应该足够好了。