gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:47:26 24 4
gpt4 key购买 nike

我正在尝试使用固定线长度和随机生成的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com