用JavaFX画出一个汽车雨刷的动画
时间: 2024-01-21 21:16:27 浏览: 122
好的,以下是一个简单的汽车雨刷动画示例代码:
```java
import javafx.animation.Interpolator;
import javafx.animation.RotateTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.geometry.Point2D;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class CarWiperAnimation extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Group root = new Group();
// 创建车窗
Rectangle carWindow = new Rectangle(200, 150, 200, 200);
carWindow.setFill(Color.LIGHTBLUE);
root.getChildren().add(carWindow);
// 创建雨刷
Circle wiper = new Circle(300, 200, 50, Color.GRAY);
root.getChildren().add(wiper);
// 创建雨刷支架
Rectangle wiperHolder = new Rectangle(290, 140, 20, 80);
wiperHolder.setFill(Color.GRAY);
root.getChildren().add(wiperHolder);
// 创建雨刷水平旋转动画
RotateTransition rotateTransition = new RotateTransition(Duration.seconds(1), wiper);
rotateTransition.setByAngle(180);
rotateTransition.setCycleCount(Timeline.INDEFINITE);
rotateTransition.setAutoReverse(true);
rotateTransition.setInterpolator(Interpolator.LINEAR);
// 创建雨刷垂直移动路径
double startX = wiper.getCenterX();
double startY = wiper.getCenterY();
double endX = wiper.getCenterX();
double endY = wiper.getCenterY() + 100;
Point2D startPoint = new Point2D(startX, startY);
Point2D endPoint = new Point2D(endX, endY);
// 创建雨刷垂直移动动画
RotateTransition moveTransition = new RotateTransition(Duration.seconds(1), wiper);
moveTransition.setInterpolator(Interpolator.LINEAR);
moveTransition.setAutoReverse(true);
// 监听水平旋转动画的事件,在每次完成后更新垂直移动动画的路径
rotateTransition.setOnFinished(event -> {
startPoint = endPoint;
endPoint = startPoint.add(0, 100);
moveTransition.setFromAngle(wiper.getRotate());
moveTransition.setToAngle(wiper.getRotate());
moveTransition.setFromY(startPoint.getY());
moveTransition.setToY(endPoint.getY());
moveTransition.play();
});
// 开始水平旋转动画
rotateTransition.play();
Scene scene = new Scene(root, 600, 500);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
```
这段代码使用JavaFX库创建一个窗口,并在窗口中绘制一个车窗、一个雨刷和一个雨刷支架。它使用两个`RotateTransition`对象来控制雨刷的水平旋转和垂直移动。在每次水平旋转动画完成后,它会更新垂直移动动画的路径并开始新的动画。最后,它将场景显示在窗口中。
运行该程序,您将看到一个简单的汽车雨刷动画。您可以修改代码来改变雨刷的颜色、大小、位置和运动轨迹,以及添加其他元素来创建更复杂的汽车场景。
阅读全文