衝突があったときに画像を消す方法は?

私は水平方向に動く2つの画像を持っています。 2つのイメージの間に衝突があるときはいつでも、私はそれらを消滅させたい、それが私の問題です。誰かが私にそれをどうやって手伝ってもらえますか?

ところで、これは私のコードです。あなたが好きならチェックすることができます:

private boolean checkCollisions()
{
    for (Sprite r1 : z_sorted_sprites)
    {
        for (Sprite r2 : z_sorted_sprites)
        {
            if (r1 == r2)
            {
                continue;
            }

            RectangleX me = r1.getBounds();
            RectangleX other = r2.getBounds();

            if (me.intersects(other))
            {
                collision = true;

                System.out.println("collision : " + r1.getName() + " with " + r2.getName());

               //disappear(me,other);
            }
            else
            {
                collision = false;
                System.out.println("no collision");
            }
        }

    }
    return collision;
}
1
「消滅させたい」あなたが何をしていても、それらを表示させないでください。 SSCCE を投稿するとすぐに役立ちます。
追加された 著者 Andrew Thompson,
「消滅させたい」とは、即座に隠されるべきであるか、フェードアウトするか、煙の中で消えるか、あるいは衝突コースでは全く現れないということですか?あなたがその質問が何であるかを推測しなければならない時は、答えがつかない。
追加された 著者 Stein G. Strindhaug,
@Stein私はそれが一度衝突が発生しても決して現れないことを意味する。
追加された 著者 user843916,

2 答え

同じコレクションを2回繰り返しているので、削除するアイテムのリストを作成し、すべての衝突が検出されたら削除する必要があります。

そのようです:

private boolean checkCollisions()
{
    ArrayList toRemove = new ArrayList();

    for (Sprite r1 : z_sorted_sprites)
    {
        for (Sprite r2 : z_sorted_sprites)
        {
           //...
            if (me.intersects(other))
            {
               //...
                toRemove.add(r1);
                toRemove.add(r2);
            }
            else
            {
               //...
            }
        }
    }

    z_sorted_sprites.removeAll(toRemove);

    return collision;
}

2つのスプライトが衝突すると、それぞれが toRemove リストに2回追加されることに注意してください。 forループを変更することで、これを防ぐことができます( z_sorted_sprites List であると仮定して)

for (int i = 0; i < z_sorted_sprites.size(); i++)
{
    Sprite r1 = z_sorted_sprites.get(i);
    for (int j = i + 1; j < z_sorted_sprites.size(); j++)
    {
        Sprite r2 = z_sorted_sprites.get(j);
       //...
    }
}

さて、あなたの戻り値があなたが思っているものを返すのは確実ですか?現在、リスト内の最後の2つのスプライトが衝突しない限り、falseを返します。衝突があればtrueを返すようにするには、行を取り除く collision = false; 衝突回数を返す方が便利かもしれませんが、 ...

0
追加された
なぜ違いがあるのでしょうか? z_sorted_sprites リストがどのように作成/更新されるのかわからなくても、あなたをさらに助けることは不可能です...
追加された 著者 vaughandroid,
私の2つのイメージは別のクラス、犬クラスと猫クラスから来ています。
追加された 著者 user843916,

以下を試してください:

paint(Graphics g)メソッドで、次の操作を行います。

if(!checkCollisions()){
   //draw your sprites
   //g.drawImage(...);
}

また、checkCollisions()メソッドでは、衝突を検出したときにrepaintを呼び出します。

if (me.intersects(other))
            {
                collision = true;

                System.out.println("collision : " + r1.getName() + " with " + r2.getName());

                repaint();
            }
0
追加された