用javafx模拟汽车上雨刷器运行动画
时间: 2023-12-03 22:46:30 浏览: 156
基于JavaFX的强大Minecraft启动器HMCL设计源码
首先,我们需要在JavaFX中创建一个Canvas,用来绘制我们的动画。然后,我们可以使用Timeline类,来控制动画的播放。
以下是一个简单的示例代码,用来模拟汽车上雨刷器的运行动画:
```java
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Duration;
public class RainWiperAnimation extends Application {
private final int WIDTH = 400;
private final int HEIGHT = 400;
private final int WIPER_WIDTH = 60;
private final int WIPER_HEIGHT = 10;
private final int RAIN_DROP_SIZE = 5;
private final int RAIN_DROP_SPEED = 3;
@Override
public void start(Stage primaryStage) throws Exception {
Group root = new Group();
Scene scene = new Scene(root, WIDTH, HEIGHT, Color.BLACK);
Canvas canvas = new Canvas(WIDTH, HEIGHT);
GraphicsContext gc = canvas.getGraphicsContext2D();
root.getChildren().add(canvas);
// 绘制雨刷器
gc.setFill(Color.WHITE);
gc.fillRect(WIDTH / 2 - WIPER_WIDTH / 2, HEIGHT / 2 - WIPER_HEIGHT / 2, WIPER_WIDTH, WIPER_HEIGHT);
// 创建一个Timeline,控制雨滴的下落和雨刷器的移动
Timeline timeline = new Timeline();
timeline.setCycleCount(Timeline.INDEFINITE);
// 雨滴的下落
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(0), event -> {
gc.setFill(Color.BLUE);
double x = Math.random() * WIDTH;
double y = -RAIN_DROP_SIZE;
gc.fillOval(x, y, RAIN_DROP_SIZE, RAIN_DROP_SIZE);
KeyValue kv = new KeyValue(yProperty(), HEIGHT + RAIN_DROP_SIZE);
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds((HEIGHT + RAIN_DROP_SIZE - y) / RAIN_DROP_SPEED), kv));
}));
// 雨刷器的移动
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(0), event -> {
KeyValue kv = new KeyValue(xProperty(), WIDTH / 2 + WIPER_WIDTH / 2);
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(1), kv));
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(1), event -> {
KeyValue kv = new KeyValue(xProperty(), WIDTH / 2 - WIPER_WIDTH / 2);
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(1), kv));
}));
timeline.play();
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
```
在上述代码中,我们首先创建了一个Canvas,并在其中绘制了一个白色的矩形,作为雨刷器。然后,我们创建了一个Timeline,并在其中添加了两个KeyFrame,分别用来控制雨滴的下落和雨刷器的移动。
在第一个KeyFrame中,我们使用Math.random()函数随机生成了一个雨滴的位置,并在Canvas上绘制了一个蓝色的圆形,表示雨滴。然后,我们使用KeyValue类来控制雨滴的下落,通过计算雨滴从顶部到底部的距离,来确定雨滴下落的时间。在第二个KeyFrame中,我们使用KeyValue类来控制雨刷器的移动,从而实现了雨刷器在画布上的左右摆动。
最后,我们将Timeline播放起来,并将Canvas添加到场景中,显示出来。运行程序后,您将看到一个模拟汽车上雨刷器的运行动画。
阅读全文