JavaFX TranslateTransition 没有到达定义的点

JavaFX TranslateTransition doesn't go to the point definied

我想让我的蓝色圆圈从一个浅蓝色圆圈变成另一个,但只做了一半。

坐标显示相同:

initial_lightblue: 211.7,230.5
blue: 193.7,239.1
final_lighblue: 193.7,239.1

我的代码

TranslateTransition transition = new TranslateTransition();
transition.setToX(c.getX());
transition.setToY(c.getY());
transition.setNode(view);
transition.setInterpolator(Interpolator.LINEAR);
transition.play();

有什么建议吗?

来自文档

TranslateTransition : This Transition creates a move/translate animation that spans its duration. This is done by updating the translateX, translateY and translateZ variables of the node at regular interval.

所以它将使用翻译属性来重新定位窗格内的实际节点。话虽如此,如果您通过设置节点的 layoutX 和 layoutY 属性将节点定位在 x=50 和 y=50,它们的平移值将为 0,因此如果您实际上尝试将 TranslateTransition 的结束坐标设置为 ex。 x = 100 y = 100 然后它会将你的节点移动到 x = 150 和 y = 150 而不是 (x,y) = (100,100) 导致它会改变翻译 属性 (x 和y) 从 0 到 100,最终会将节点移动到 (x,y) = 150,150.

话虽如此,这里有一个例子:

import javafx.animation.Interpolator;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class Test extends Application {

    private Circle c1;
    private Circle c2;

    @Override
    public void start(Stage stage) throws Exception {

        AnchorPane pane = new AnchorPane();

        // Set only the radius
        c1 = new Circle(5);
        c1.setFill(Color.BLUE);

        // Let's translate the c1 to the location we want
        c1.setTranslateX(50);
        c1.setTranslateY(60);

        // The same for circle2
        c2 = new Circle(5);
        c2.setFill(Color.RED);

        c2.setTranslateX(120);
        c2.setTranslateY(200);

        pane.getChildren().addAll(c1, c2);

        pane.setOnMouseClicked(e -> {
            startAnimation();
        });

        stage.setScene(new Scene(pane, 400, 500));
        stage.show();
    }

    private void startAnimation() {
        TranslateTransition transition = new TranslateTransition();
        transition.setNode(c1);
        transition.setToX(c2.getTranslateX());
        transition.setToY(c2.getTranslateY());
        transition.setInterpolator(Interpolator.LINEAR);
        transition.play();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

P.S :在您的代码示例中,您指的是圆,但您调用 c.getX() 实际取圆的 x,这相当奇怪的是 Circle class 没有方法 getX() 我怀疑你是指 getCenterX() 或者那些不是 Circles 。