Java JPanel动画
所以我正在用Java编写一个游戏,我开始使用drawRect()方法来表示玩家、敌人和射击。一切都很好。 然后我决定试着装腔作势。 我发现自己正在创建每个对象的.png图像,并使用Graphics2D drawImage()方法。一切都开始变慢了。有没有其他方法可以加快这一进程 我的动画基于一个摆动计时器Java JPanel动画,java,swing,jpanel,Java,Swing,Jpanel,所以我正在用Java编写一个游戏,我开始使用drawRect()方法来表示玩家、敌人和射击。一切都很好。 然后我决定试着装腔作势。 我发现自己正在创建每个对象的.png图像,并使用Graphics2D drawImage()方法。一切都开始变慢了。有没有其他方法可以加快这一进程 我的动画基于一个摆动计时器 public void paint(Graphics g){ super.paint(g); Graphics2D g2d = (Graphics2D)g; p
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();
}
有关于动画的提示或教程吗?
谢谢10毫秒的延迟是每秒100帧。这几乎肯定太快了 此外,如果要在迭代过程中从
集合中删除对象,则需要执行以下操作:
Iterator<T> itr = collection.iterator();
while(itr.hasNext()) {
T obj = itr.next();
if(removeObj) {
itr.remove();
}
}
Iterator itr=collection.Iterator();
while(itr.hasNext()){
T obj=itr.next();
如果(删除对象){
itr.remove();
}
}
ConcurrentModificationException
s会导致非确定性行为。你需要避免它们,而不是忽略它们。你的计时器延迟了多少?为什么要捕获ConcurrentModificationException
s并忽略它们?!如果要在迭代过程中从集合中删除对象
,则应在while循环中手动使用其迭代器
,并使用迭代器#remove
。我已将其设置为10,这是否太快?10毫秒的延迟是每秒100帧。那肯定太快了。明白了,谢谢!看起来我需要做一些清理,如果可能的话,尝试重新绘制()特定区域,而不是整个面板。