求简洁易懂的JavaFX 2D动画实现:月球绕地球、地球绕太阳旋转
简洁JavaFX实现嵌套旋转动画(月球绕地球+地球绕太阳)
下面是一段极简的JavaFX代码,直接实现你要的嵌套旋转效果,没有多余复杂的太阳系逻辑,核心只保留嵌套旋转的关键实现:
import javafx.animation.RotateTransition; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; import javafx.util.Duration; public class NestedRotationAnimation extends Application { @Override public void start(Stage primaryStage) { // 创建核心天体:太阳、地球、月球 Circle sun = new Circle(400, 300, 30, Color.GOLDENROD); Circle earth = new Circle(550, 300, 15, Color.DODGERBLUE); Circle moon = new Circle(600, 300, 8, Color.LIGHTGRAY); // 布局容器 Pane root = new Pane(sun, earth, moon); Scene scene = new Scene(root, 800, 600); // 地球绕太阳旋转的动画 RotateTransition rotateEarth = new RotateTransition(Duration.seconds(10), earth); rotateEarth.setByAngle(360); rotateEarth.setCycleCount(RotateTransition.INDEFINITE); // 设置旋转中心为太阳的中心 rotateEarth.setPivotX(sun.getCenterX()); rotateEarth.setPivotY(sun.getCenterY()); // 月球绕地球旋转的动画 RotateTransition rotateMoon = new RotateTransition(Duration.seconds(2), moon); rotateMoon.setByAngle(360); rotateMoon.setCycleCount(RotateTransition.INDEFINITE); // 设置旋转中心为地球的中心 rotateMoon.setPivotX(earth.getCenterX()); rotateMoon.setPivotY(earth.getCenterY()); // 同时启动两个动画 rotateEarth.play(); rotateMoon.play(); primaryStage.setTitle("Nested Rotation Demo"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
关键逻辑说明
- 嵌套旋转核心:地球的旋转中心绑定太阳位置,月球的旋转中心绑定地球位置。当地球绕太阳转动时,月球的旋转中心会随地球同步移动,自然实现"月球跟着地球绕太阳转+自身绕地球转"的效果。
- 动画控制:用
RotateTransition实现旋转,Duration控制旋转周期(地球10秒一圈,月球2秒一圈,可自行调整),INDEFINITE设置无限循环。 - 布局简化:直接用
Pane作为容器,所有天体初始位置沿水平方向排列,旋转时自动围绕中心做圆周运动,无需额外计算轨道坐标。
内容的提问来源于stack exchange,提问作者user23299088
相关产品推荐
相关产品推荐

