簡體   English   中英

Java Swing簡單動畫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM