我有一个类应该使用paintComponent和repaint()模拟一个firework动画我检测到的问题是“Firework”是新初始化的 每次调用该方法时,每次都会将firework的projectileTime字段重置为零(在构造函数中指定)。实例化烟花对象的适当位置在哪里,以便projectileTime字段适当增加? (在本课程或其他课程中) 见代码:
public class FireworkComponent extends JComponent {
private static final long serialVersionUID = 6733926341300224321L;
private double time;
public FireworkComponent(){
time=0;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.translate(0, this.getHeight());
Firework f= new Firework(this.getWidth()/2,0,73,90,Color.red,5);
f.addFirework(75,35,Color.BLUE,6);
f.addFirework(75, 155, Color.green, 6);
time+=.1;
Point point=f.addTime(.1);
g.fillOval(point.x, (-point.y),15,15);
try{
Thread.sleep(500);
System.out.println("sleep");
}
catch (InterruptedException e){
e.printStackTrace();
}
this.repaint();
}
}
答案 0 :(得分:2)
首先从paintComponent()方法中删除Thread.sleep()。
然后,您需要定义随时间变化的Firework组件的属性。
最后,您将使用Swing Timer来安排烟花的动画。每次Timer触发时,您都会更新组件属性,然后在组件上调用repaint()。
答案 1 :(得分:2)
请
不要在Paint Graphics2D中添加Firework f= new Firework(this.getWidth()/2,0,73,90,Color.red,5);
,你必须在此之前做好准备
请勿使用Thread.sleep(int);
延迟绘画,因为Graphics2D有javax.swing.Timer
,但您必须使用Timer初始化paintComponent()
,而不是停留在绘图内画体
不确定是否以某种方式工作Point point=f.addTime(.1);
修改
动画的答案 2 :(得分:2)
将Firework
存储为类级别属性,并在FireworkComponent
构造函数中对其进行实例化。