[英]Java swing simple animation
我在使用簡單的動畫程序時遇到麻煩(是的,這是家庭作業)。 這個問題要求我們在500X500的窗口上隨機創建100個粒子類對象,並使用擺動計時器將它們移動。 這是我遇到的問題,正在創建的粒子似乎不是隨機的,但它們沿對角線軸對齊,我在發現邏輯錯誤時遇到困難,非常感謝您的幫助。 這是應該清楚的屏幕截圖。 http://i57.tinypic.com/qswbix.jpg
如果有人發現我的問題難以理解,我還會在帖子末尾張貼作業問題。 謝謝你的幫助
public class ParticleFieldWithTimer extends JPanel{
private ArrayList<Particle> particle = new ArrayList<Particle>();
Timer timer;
boolean b;
public ParticleFieldWithTimer (){
this.setPreferredSize(new Dimension(500,500));
for(int i = 0; i < 100; i++) {
particle.add(new Particle());
}
timer = new Timer(40, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae) {
for (Particle p : particle) {
p.move();
}
repaint();
}
});
timer.start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setColor(Color.RED);
for (Particle p : particle) {
double temp1 = p.getX();
double temp2 = p.getX();
int tempX = (int) temp1;
int tempY = (int) temp2;
g2.fillRect(tempX, tempY, 3, 3);
}
}
public static void main(String[] args) {
final JFrame f = new JFrame("ParticleField");
final ParticleFieldWithTimer bb = new ParticleFieldWithTimer();
f.setLayout(new FlowLayout());
f.add(bb);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
try {
bb.finalize();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
f.dispose();
}
});
f.pack();
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
這是粒子類
public class Particle {
private int x , y ;
Random r = new Random();
public Particle () {
x = r.nextInt(500);
y = r.nextInt(500);
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void move() {
x += r.nextBoolean() ? 1 : - 1;
y += r.nextBoolean() ? 1 : - 1;
System.out.println("x : " + x+" y: " + y);
}
}
創建一個具有兩個雙字段x和y的類Particle,創建一個將這些字段初始化為0到500之間的隨機值的構造函數,返回其值的getX和getY方法,以及將void隨機添加或減去一個的void move()方法x和y的每個值。 (添加到x和y的數量是兩個獨立的隨機數。)接下來,創建一個擴展JPanel的類ParticleFieldWithTimer。 此類的大小應為500 * 500像素。 它的構造函數應該首先用100個粒子對象填充ArrayList字段,然后啟動一個擺動計時器,每秒滴答25次。 在每個滴答聲處,動作偵聽器應首先為每個粒子調用move方法,然后再調用repaint。 ParticleFieldWithTimer的paintComponent方法應將每個粒子繪制為3 * 3矩形到其當前坐標。
在paintComponent
方法中,
更換
double temp2 = p.getX();
與
double temp2 = p.getY();
祝好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.