1

爆発を起こしています。爆発は、その長方形 (x、y、x + w、y + h) 内のすべての敵に当たるはずです。爆発と敵の両方が、四角形を返す getBounds() メソッドを持つ Sprite クラスから継承します。爆発アイテムを作成すると、コンストラクターで敵をループして、長方形が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()ソース長方形を変更し、2つの長方形が交差する場合はそれらの交差に設定します。これはjavadocに記載されています。これは、最初に成功した交差テストの後、後続の交差テストが失敗する可能性が高いことを意味します(元の交差長方形と互いに交差するゾンビに対してのみ合格します)。

代わりに、Rect.intersects()(末尾に「s」を付けて)を使用する必要があります。

于 2013-01-30T01:53:31.660 に答える