猿问

如何在父坐标系中平移节点?

我有一个节点,它是“本地”组的子节点,它是“全局”组的子节点。我想在全局组的坐标中平移孩子,但TranslateTransition在本地组坐标中移动它。


在这个例子中,我有这个父层次结构:


parent group

|- red circle

|- child group

  |- blue circle

我想把蓝色圆圈放在红色圆圈的顶部。如果我将它转换为红色圆圈的坐标,它就会远离它,因为它在它自己的组中。如果我翻译整个小组,它会起作用。


import javafx.animation.TranslateTransition;

import javafx.application.Application;

import javafx.scene.Group;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.layout.Pane;

import javafx.scene.layout.VBox;

import javafx.scene.paint.Color;

import javafx.scene.shape.Circle;

import javafx.stage.Stage;

import javafx.util.Duration;


public class AnimTest extends Application {


    @Override

    public void start(Stage stage) throws Exception {

        Circle c = new Circle(5, Color.BLUE);

        Group group = new Group(c);

        group.setTranslateX(40);

        group.setTranslateY(50);


        Circle target = new Circle(10, Color.RED);

        target.setTranslateX(20);

        target.setTranslateY(20);


        Group parent = new Group(target, group);


        TranslateTransition t1 = new TranslateTransition(Duration.seconds(1), c); // 'group' works

        t1.setToX(target.getTranslateX());

        t1.setToY(target.getTranslateY());


        Button next = new Button("Play");

        next.setOnAction(e -> t1.play());


        Pane p = new Pane(parent);

        p.setPrefSize(200, 200);

        VBox root = new VBox(p, next);

        stage.setScene(new Scene(root));

        stage.show();

    }


    public static void main(String[] args) {

        launch(args);

    }

}

如何在红色圆圈的父级坐标中进行蓝色圆圈的平移?


请理解这是一个简单的例子。事实上,层次结构更大,看起来像


parent group

|- target node

|- group1

  |- group2

    |- group3

      |- moving node

而且我还可以使用目标的边界而不是它的翻译属性来找到最终目的地,但对于示例来说,翻译就足够了。


哆啦的时光机
浏览 153回答 2
2回答

婷婷同学_

你可以translate使用任何节点setTranslateX(),setTranslateY()问题是如何知道你需要在每个方向上平移的量,你可以通过获得Node你想要移动的边界来做到这一点Bounds nodeBounds = node.localToScreen(node.getBoundInLocal());以及目标节点的边界,然后您可以使用它们的边界进行翻译我希望这可能会有所帮助
随时随地看视频慕课网APP

相关分类

Java
我要回答