gpt4 book ai didi

java - 动画矩形形状鼠标点击的距离

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:03 24 4
gpt4 key购买 nike

过去几个小时我一直被这个愚蠢的错误困扰。基本上,我想将小矩形动画化(滑动)到我在框中单击鼠标的位置(X 值是我现在关心的全部)。下面的源代码正是这样做的。

但是,我真正想要的是保存终点的位置,这样如果我单击 Pane 的中点,该框会向上滑动到中间点(如上所述),然后如果我单击3/4 处,盒子会从中点滑动到 3/4 标记。

看起来我们所要做的就是 setX(),对吧?取消注释我保存矩形 X 坐标的位置并再次运行它。你会看到它会跳!为什么?我完全不知道,在过去的几个小时里我一直在努力寻找这个讨厌的错误的修复/解决方法,但一无所获。如果有人能给我指明正确的方向,我保证,我会付出代价。

import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class TimelineEvents extends Application {

Rectangle myRectangle;

public void start(Stage primaryStage) {
Pane mainPane = new Pane(); // Create a ball pane
//ballPane.play();
Scene scene = new Scene(mainPane, 500, 500);
primaryStage.setScene(scene);
primaryStage.show();

myRectangle = new Rectangle(0, 20, 30, 30);

mainPane.setOnMouseClicked((MouseEvent event) -> {
animate(event);
});

mainPane.getChildren().add(myRectangle);
}

public void animate(MouseEvent event) {

Timeline timeline = new Timeline();
System.out.println(myRectangle.getY());
timeline.getKeyFrames().addAll(
new KeyFrame(Duration.ZERO,
new KeyValue(myRectangle.translateXProperty(), 0),
new KeyValue(myRectangle.translateYProperty(), 0)
),
new KeyFrame(new Duration(1000),
new KeyValue(myRectangle.translateXProperty(), event.getX()),
new KeyValue(myRectangle.translateYProperty(), 0)
)
);

timeline.play();

timeline.setOnFinished((ActionEvent) -> {
//myRectangle.setX(event.getX());
});
}

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

最佳答案

您始终在零位置开始动画,请像这样更改动画:

timeline.getKeyFrames().addAll(
new KeyFrame(Duration.ZERO,
new KeyValue(myRectangle.translateXProperty(), myRectangle.getTranslateX()),
new KeyValue(myRectangle.translateYProperty(), 0)
),
....

编辑:合并评论,您所需要的只是

timeline.getKeyFrames().add(
new KeyFrame(new Duration(1000),
new KeyValue(myRectangle.translateXProperty(), event.getX())
)
);

关于java - 动画矩形形状鼠标点击的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26771972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com