我想创建一个友好的火力机制。基本上,我的立方体反复射击子弹击中敌人。我还想检测子弹和另一个立方体之间的撞击(友军射击)。为了避免子弹的边界与发射它的立方体重叠,在我的“立方体”类中,我覆盖了等于。每个多维数据集都有一个唯一的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());
}
注意
“友好之火”是指当你的物体击中自己而不是敌人时。
答案 0 :(得分:1)
我怀疑问题更可能来自'if(square.getBounds()。overlaps(bullet.getBounds()))'而不是square的equals()方法。
'BaseBullet'和'BaseSquare'是否扩展了LibGDX的Sprite类?你不应该调用getBoundingRectangle()吗?