首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >围绕另一个对象旋转(环绕)节点(javafx-2)

围绕另一个对象旋转(环绕)节点(javafx-2)
EN

Stack Overflow用户
提问于 2012-03-28 21:20:55
回答 1查看 2.1K关注 0票数 1

我在创建一个简单的太阳/地球类动画时遇到了麻烦。

在下面的示例中,圆应该围绕矩形动态观察。

为此,我创建了一个新组,附加偏移为0的矩形和偏移量为50的圆。

现在,当组被旋转时,我认为矩形应该围绕自己旋转,圆圈应该围绕矩形旋转。

但这两个形状似乎都有一个偏移量,并围绕一个看不见的中心旋转。

代码语言:javascript
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-28 22:33:02

请注意,任何对象的旋转都会围绕其中心发生。解决问题的最简单方法是使用StackPane而不是组。默认情况下,StackPane会将所有对象放在其中心。

代码语言:javascript
复制
private void createScene(Group root) {
    Pane branch = new StackPane();
    root.getChildren().add(branch);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9908402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档