java - 如何使用 javax swing 计时器的整数数组来改变速度

标签 java random timer

我正在尝试使用固定线长度和随机生成的 x 坐标来模拟降雨。我已经让随机 x 坐标起作用,但我希望线条在重新绘制到窗口上后也具有不同的下降速度。我正在使用 javax swing 计时器和 java Random 生成整数以作为索引传递到我的“速度”数组中。然而速度没有改变。它保持不变,而且速度太快了。

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();

}

最佳答案

每次重新绘制面板时,您都会启动一个新的计时器,并且所有以前的计时器仍在运行。您应该更改算法以使用唯一的计时器,并根据前一个算法和当前速度计算新的 y。

例如,时间每 40 毫秒重新绘制一次。如果速度为 N,则新的 y 将是前一个 + (N * down)

关于java - 如何使用 javax swing 计时器的整数数组来改变速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15282911/

相关文章:

java - 更新 List<Object> 中的对象仅影响特定字段。 (合并)

java - HttpsURLConnection 和 Cookie

python - 我正在寻找哪个随机数来实现这个 :

c++ - 为什么我的STM32F7每43秒才中断一次?

python - 在线程中打印不适用于python 3

java - 参数拦截器错误: Unexpected Exception caught,设置表达式错误

java - 将 float 转换为 double 而不会丢失精度

php - 如何用PHP生成随 secret 码?

c++ - 如何高效生成Zipf分布数?

C#如何及时停止线程?