1

我正在制造爆炸。爆炸应该击中其矩形(x,y,x + w,y + h)内的所有敌人。爆炸和敌人都继承自 Sprite 类,该类具有返回其矩形的 getBounds() 方法。当我创建爆炸项目时,我在构造函数中循环遍历敌人以检查矩形是否与 rectangle.intersects(rectangle2) 相交。但似乎当有多个目标应该相交时,有时检查会忽略其中一些......

下面是一些代码:在类Explosion的构造函数中,继承类Sprite

    List<Zombie> zombies = mGamePlay.getZombieHandeler().getZombies();
    Rect r = getBounds();

    for(int i = 0; i < zombies.size(); i++)
    {
        Rect zR = zombies.get(i).getAnimation().getBounds();

        if(!zombies.get(i).isDead() && r.intersect(zR))
            zombies.get(i).doDamage(new int[]{damage, 0, 0});
    }

内部类 Sprite:

public Rect getBounds()
{
    return new Rect(mPosX, mPosY, mPosX + mWidth, mPosY + mHeight);
}
4

1 回答 1

5

Rect.intersect()将修改源矩形并将其设置为两个矩形的交点(如果它们相交)。这在 javadoc 中有所提及。这意味着在第一次成功的相交测试之后,后续的相交测试可能会失败(它们只会通过与原始相交矩形相交的僵尸。)

相反,您应该使用Rect.intersects()(末尾带有“s”。)

于 2013-01-30T01:53:31.660 回答