我在制作简单的太阳/地球动画方面遇到了麻烦
在下面的示例中,圆圈应围绕矩形进行轨道运动
为此,我创建一个新组,附加偏移0的矩形和偏移50的圆。
现在当旋转组时,我认为矩形应该围绕自身旋转,圆圈应围绕矩形运行。
但似乎两个形状都有一个偏移并围绕一个看不见的中心旋转。
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.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// create root node
Group root = new Group();
Scene scene = new Scene(root, 640, 400);
primaryStage.setScene(scene);
// translate root node to center of the screen
root.setTranslateX(320);
root.setTranslateY(200);
// create scene
createScene(root);
primaryStage.show();
}
private void createScene(Group root) {
Group branch = new Group();
root.getChildren().add(branch);
// create a recangle, which will be added to the branch
Rectangle r = new Rectangle(40, 20);
branch.getChildren().add(r);
// circle should orbit around the rectangle
Circle c = new Circle(10);
branch.getChildren().add(c);
c.setTranslateY(-50);
// rotate the branch
Timeline rot = new Timeline();
rot.setCycleCount(Timeline.INDEFINITE);
rot.setRate(1);
rot.getKeyFrames().addAll(
new KeyFrame(Duration.ZERO, new KeyValue(
branch.rotateProperty(), 0)),
new KeyFrame(Duration.seconds(5), new KeyValue(branch
.rotateProperty(), 360)));
rot.playFromStart();
}
public static void main(String[] args) {
launch(args);
}
}
答案 0 :(得分:3)
请注意,任何物体的旋转都发生在其中心附近。解决问题的最简单方法是使用StackPane而不是Group。 StackPane默认将所有对象放到它的中心。
private void createScene(Group root) {
Pane branch = new StackPane();
root.getChildren().add(branch);