2

所以我正在用 Java 编写一个游戏,我开始使用 drawRect() 方法来表示玩家、敌人和射击。一切都很棒。然后我决定试着变得花哨。我发现自己创建了每个对象的 .png 图像并使用了 Graphics2D drawImage() 方法。一切都开始放缓。有没有其他方法可以加快这个过程?

我的动画基于 Swing Timer

    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();
} 

关于动画的任何提示或教程?谢谢

4

1 回答 1

1

10 毫秒的延迟是每秒 100 帧。这几乎可以肯定是太快了。

Collection此外,如果您想在迭代时删除一个对象,您需要执行以下操作:

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

ConcurrentModificationExceptions 导致不确定的行为。你需要避开它们,而不是忽视它们。

于 2012-04-08T20:10:23.820 回答