JavaFX TranslateTransition不会进入定义点

问题描述:

我希望我的蓝色圆圈从一个浅蓝色圆圈转到另一个,但只有一半。JavaFX TranslateTransition不会进入定义点

enter image description here

座标显示是相同的:

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:这种转变将创建一个移动/翻译动画跨越它的持续时间。这是通过定期更新 节点的translateX,translateY和translateZ变量来完成的。

所以它会使用translate属性来重新定位窗格中的实际节点。如果通过设置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); 
    } 
} 

PS:在你的代码示例你指的圈子,但你打电话c.getX()采取实际圆的x,那是相当诡异导致Circle类没有方法getX()我想你正在推荐getCenterX()或者那些不是Circles。

+0

我注意到,当我做setTranslateX和Y而不是在表达式不同的圆的构造函数上设置X和Y时。谢谢! – CarvalhaisMatos