2012-04-08 10 views
2

私はJavaでゲームを書いています。私はdrawRect()メソッドを使ってプレイヤー、敵、ショットを表現し始めました。すべてが素晴らしかったです。 それから私は空想を得ようと決めました。 各オブジェクトの.pngイメージを作成して、Graphics2D drawImage()メソッドを使用していました。すべてが減速し始めた。プロセスをスピードアップする方法がありますか?Java JPanel animation

私のアニメーションはスイングタイマー

public void paint(Graphics g){ 
    super.paint(g); 
    Graphics2D g2d = (Graphics2D)g; 
    player1.paintShips(g); 
    g2d.drawImage(bGround, 14, 14, this); 
    try{ 
     for(Shot s: liveRounds){ //liveRounds is an ArrayList of Shots 
      if(!inBounds.contains(s.getRect()) || villains.collision(s)){ 
       if(villains.collision(s)){ 
        villains.collided(s, this); 
       } 
       liveRounds.remove(s); 
       roundCount--; 
      } 
      else{ 
       s.paintShot(g, this);     
      } 
     } 
    }catch(ConcurrentModificationException e){}; 
    villains.paintEnemyGrid(g, this); 
    g2d.setColor(Color.cyan); 
    g2d.draw(hitZone1); 
    g2d.setColor(Color.red); 
    g.drawString("X: " + player1.getX(1) + " Y: " + player1.getY(1), 370, 150); 
    g2d.draw(inBounds); 
    g.drawString(score + "", 440, 40); 
    g.dispose(); 
} 

アニメーション上の任意のヒントやチュートリアルに基づいていますか? ありがとう

+0

タイマーの遅延はどのくらいですか?なぜあなたは 'ConcurrentModificationException'をキャッチして、それらを無視していますか?反復処理中にオブジェクトを 'Collection'から削除したいのであれば、whileループで' Iterator'を手動で使用し、 'Iterator#remove'を使うべきです。 – Jeffrey

+0

私はそれを10に設定しました、それは速すぎるでしょうか? – user1320716

+2

10ミリ秒の遅延は100フレーム/秒です。それはほぼ確実に速すぎます。 – Jeffrey

答えて

1

遅延は100フレーム/秒です。それはほぼ確実に速すぎます。非決定論的行動へ

Iterator<T> itr = collection.iterator(); 
while(itr.hasNext()) { 
    T obj = itr.next(); 
    if(removeObj) { 
     itr.remove(); 
    } 
} 

ConcurrentModificationException秒リード:あなたはそれを反復している間Collectionからオブジェクトを削除したい場合は

はまた、あなたがこれを行う必要があります。あなたはそれらを無視しないで避けなければなりません。