0

ランダムに生成されたx座標で固定線長を使用して、降雨をシミュレートしようとしています。ランダムなx座標を機能させましたが、ウィンドウに再描画した後も、線の立ち下がり速度を変えたいと思います。私はjavaxスイングタイマーとjavaRandomを使用して整数を生成し、インデックスとして「速度」配列に渡します。ただし、速度は変わりません。それは同じままで、速すぎます。

public class rain extends JPanel implements ActionListener {
int i = 0;
int[] speed = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50};
double[] x = {10, 202, 330, 140, 250, 160, 470, 180, 290, 510};
double y1 = 10, y2 = 20;
double down = 1;
Random random = new Random();
//Timer t = new Timer(speed[i], this);



public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D l = (Graphics2D) g;
        Line2D line = new Line2D.Double(x[i], y1, x[i], y2);
        l.setColor(Color.blue);
        l.draw(line);
        Timer t = new Timer(speed[i], this);
        t.start();
}


public void actionPerformed(ActionEvent e) {        
        if (y2 < 380) {
            y1 += down; 
            y2 += down;
        }else{
            y1 = 10;
            y2 = 20;
            i = random.nextInt(10);

        }
    repaint();

}
4

1 に答える 1

1

パネルが再描画されるたびに新しいタイマーを開始し、以前のすべてのタイマーはまだ実行されています。一意のタイマーを使用するようにアルゴリズムを変更し、前のタイマーと現在の速度に基づいて新しいyを計算する必要があります。

たとえば、時間は40ミリ秒ごとに再描画されます。速度がNの場合、新しいyは前のyになります+(N * down)

于 2013-03-07T22:30:34.463 に答える