Java Android Rectangle.intersects在循环中无法正常工作

时间:2013-01-30 01:30:19

标签: java android intersection rectangles

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

这是som代码: 在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);
}

1 个答案:

答案 0 :(得分:5)

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

相反,你应该使用Rect.intersects()(最后用's'。)