JavaFX TranslateTransition不会进入定义点
问题描述:
我希望我的蓝色圆圈从一个浅蓝色圆圈转到另一个,但只有一半。JavaFX TranslateTransition不会进入定义点
座标显示是相同的:
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。
我注意到,当我做setTranslateX和Y而不是在表达式不同的圆的构造函数上设置X和Y时。谢谢! – CarvalhaisMatos