Libgdx 处理友好的火灾碰撞检测

Libgdx 处理友好的火灾碰撞检测,libgdx,collision,Libgdx,Collision,我想创建一个友好的射击机制。基本上,我的立方体反复发射一颗子弹来打击敌人。我还想检测子弹和另一个立方体(友军火力)之间的撞击。为了避免项目符号的边界与触发它的多维数据集重叠,在我的“多维数据集”类中,我重写了equals。每个多维数据集都有一个唯一的id,创建多维数据集后立即初始化 问题是我有一个非常糟糕的bug。当我添加第一个立方体时,所有立方体的行为都正常,但一旦我添加第二个立方体,就会立即检测到两个立方体的子弹发生碰撞,即使它们没有相互开火。即使我添加更多的立方体,也会发生这种情况。我检查

我想创建一个友好的射击机制。基本上,我的立方体反复发射一颗子弹来打击敌人。我还想检测子弹和另一个立方体(友军火力)之间的撞击。为了避免项目符号的边界与触发它的多维数据集重叠,在我的“多维数据集”类中,我重写了equals。每个多维数据集都有一个唯一的id,创建多维数据集后立即初始化

问题是我有一个非常糟糕的bug。当我添加第一个立方体时,所有立方体的行为都正常,但一旦我添加第二个立方体,就会立即检测到两个立方体的子弹发生碰撞,即使它们没有相互开火。即使我添加更多的立方体,也会发生这种情况。我检查了边界,它们看起来很好

我写了一些代码:

碰撞检测

// check collisions between bullets and cubes (friendly fire)
    for(BaseBullet bullet : bullets) {
        for(BaseSquare square : squares) {
            // exclude collision between bullet and its own Cube
            if (!bullet.getBaseSquare().equals(square)) {
                // check if bounds overlap
                if (square.getBounds().overlaps(bullet.getBounds())) {
                    System.out.println("collision between bullet and qube");
                    // propagate the event to anyone is interested in it
                    EventsManager.qubeHitByQube(bullet, square);
                    bullet.remove();
                    bulletsToDestroy.add(bullet);
                }
            }
        }
    }
多维数据集的等于方法

@Override
public boolean equals(Object o) {
    if(!(o instanceof BaseSquare) || o == null) {
        return false;
    }
    BaseSquare baseSquare = (BaseSquare)o;
    return baseSquare.getUniqueID().equals(getUniqueID());
}
注意


“友军火力”是指当你的目标击中自己而不是敌人时

我怀疑问题更可能来自“if(square.getBounds().overlaps(bullet.getBounds())”而不是square的equals()方法


“BaseBullet”和“BaseSquare”是否扩展了LibGDX的Sprite类?您是否应该调用getBoundingRectangle()?

我更新了消息否他们没有扩展Sprite类。BaseSquare扩展图像,BaseBill扩展演员。无论如何,我发现我以错误的方式初始化了它们的边界。我会设法修复它,如果它有效,我会让你知道。