0

ここで達成しようとしているのは、衝突が検出されるたびにベクターから「花」を削除することです。ただし、ConcurrentModificationError が発生し続けます。ベクターから花を削除しようとすると、めちゃくちゃになります。私は多くの方法でそれをやってみました。花を削除する必要があることが検出されたある時点で、その位置をベクターに保存し、リスト内の次の位置が見られたときに削除しようとしました。これはあなたが見る必要がある唯一の方法だと思います。これを修正するために私ができることを誰かが見ることができますか??

private synchronized void DrawBlossoms(Canvas c) // method to draw flowers on screen and test for collision
{
    Canvas canvas = c;
    for(Blossom blossom: blossomVector)
    {
                blossom.Draw(canvas);
                if (blossom.hit(box_x,box_y, box_x + boxWidth, box_y + boxHeight, blossomVector) == true)
                {
                    Log.v(TAG, "REMOVE THIS!");
                    //blossomVector.remove(blossom);

                }
    }
}
4

1 に答える 1

1

解決策は、反復子を使用してベクターで同期することです。

synchronize(blossomVector)  
{  
    Iterator dataIterator = blossomVector.iterator();  
    while (dataIterator.hasNext())  
    {  
        //... do your stuff here and use dataIterator.remove()

    }  
}  
于 2011-04-30T01:02:33.000 に答える