处理友好的火灾碰撞检测

时间:2016-01-03 20:01:09

标签: libgdx collision

我想创建一个友好的火力机制。基本上,我的立方体反复射击子弹击中敌人。我还想检测子弹和另一个立方体之间的撞击(友军射击)。为了避免子弹的边界与发射它的立方体重叠,在我的“立方体”类中,我覆盖了等于。每个多维数据集都有一个唯一的ID,只要创建多维数据集就会初始化。

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

我放了一些代码:

碰撞检测

// 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());
}

注意

“友好之火”是指当你的物体击中自己而不是敌人时。

1 个答案:

答案 0 :(得分:1)

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

'BaseBullet'和'BaseSquare'是否扩展了LibGDX的Sprite类?你不应该调用getBoundingRectangle()吗?