2016-11-20 3 views
1

私は何らかのアルカノイドをやっていて、私は立ち往生しています。私がやる方法は、JFrame、JPanel、Timerです。だから私は何をすべきか、各タイマーの更新が このArrayListからの衝突とオブジェクトの削除のゲームチェック

public class Controller implements ActionListener{ 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     ball.move(); 
     desk.move(); 
     deskCollision(); 
     squareCollision(); 
     repaint(); 

    } 
} 

である私は、正方形のArrayListを作成し、私はそれらを印刷しました。正方形とボールとの衝突を確認すると、それは機能します。だから、ボールがボールに当たってボールの方向を変えるときに、特定の四角形を取り除きたい。まず、私はこれのようなループなしでそれを試しました。

if(ListOfSquares.get(24).getBounds2D().intersects(ball.getBounds2D())){ 
     ball.dy = 1; 
     ball.dx = -1; 
     ListOfSquares.remove(24); 
    } 

これは同様に機能します。しかし、すべての四角形を通って常に特定の四角形を取り除くループを作りたいので、私は迷っています。スレッドの例外「AWT-EventQueueの-0」java.util.ConcurrentModificationExceptionが - - あなたの助けを

for(Square square : ListOfSquares){ 
     int index = ListOfSquares.indexOf(square); 
     if (ball.getBounds2D().intersects(square.getBounds2D())) { 
      if(ball.dx == -1 && ball.dy == -1){ 
      ball.dy = 1; 
      ball.dx = -1; 
      ListOfSquares.remove(index); 
      } 
      //etc... 
     } 
    }   

おかげで私はそれがバグで終わる このようにそれを行ったが、しています。

+0

あなたがそれを –

答えて

1

イテレータはあなたを助けるかもしれない:

Iterator<String> iter = ListOfSquares.iterator(); 

while (iter.hasNext()) { 
    Square squ = iter.next(); 

    if (someCondition) 
     iter.remove(); 
} 

Refference:How to avoid "ConcurrentModificationException" while removing elements from `ArrayList` while iterating it?

+0

感謝を反復しているときに、リストの要素を削除することはできません。完璧に動作します。 –

+0

ようこそ。それが機能する場合は、[ACCEPT]をクリックしてください。ありがとう。 –

関連する問題