gpt4 book ai didi

java - PathTransition 没有像我想象的那样工作(使用 CubicCurveTo/ArcTo 和一般坐标的混淆)

转载 作者:行者123 更新时间:2023-12-01 17:57:17 25 4
gpt4 key购买 nike

我正在制作一个我想用 JavaFX 制作的游戏的原型(prototype)。它需要角色/ Sprite 沿着弯曲的路径向前移动(基本上是向前跳跃到特定位置)。我尝试使用MoveTo(使用 Sprite 的ImageView的layoutX和layoutY值,硬编码)与CubicCurveTo和ArcTo来指定此路径,但是随后, Sprite 会跳转并从窗口下方开始动画,然后执行动画从该点开始,即使我的 Sprite 位于窗口中间。

我尝试将 MoveTo 设置为 0,但随后 Sprite 会跳转到其当前位置( Sprite 的左上角)附近稍微不同的位置,然后执行动画,直到窗口下方。据我所知,无论 MoveTo 位于何处,CubicCurveTo 和 ArcTo 最终坐标仍然相同。

我的一般问题是,这些路径元素的坐标系如何工作?具体来说,如何让我的 Sprite 以弯曲位置向前移动而不跳到窗口下方?

这是我的代码(位于 FXML Controller 类的initialize() 方法内):

/*
The root is a Pane with prefWidth = 960, prefHeight = 540
*/
public void initialize() {
/*
char1 is the ImageView of the sprite. layoutX = 270, layoutY = 290
*/
char1.setScaleX(-1);

final Path path = new Path();
path.getElements().add(new MoveTo(0, 0));
// these are rough numbers, based on the coordinate system that the layoutX and layoutY of the ImageView uses
// path.getElements().add(new CubicCurveTo(300, 200, 400, 200, 500, 290));
path.getElements().add(new ArcTo(100, 60, 40, 500, 290, true, true));

final PathTransition pathTransition = new PathTransition();
pathTransition.setDuration(Duration.millis(2000));
pathTransition.setNode(char1);
pathTransition.setPath(path);
pathTransition.setCycleCount(1);
pathTransition.setAutoReverse(true);

jumpButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
pathTransition.play();
}
});
}

最佳答案

所以,嗯,我解决了我自己的问题(?)。我发现这些 PathElements 使用相对于节点当前位置的坐标,并且变换基于节点的中心。因此,为了让我的 Sprite 向前跳跃,我的 CubicCurveTo 需要在两个控制点上具有负 y 坐标。至于我的 Sprite 跳跃的部分,因为它以指定点为中心(因为 ImageView 坐标值指的是它们的原点,即边界框的左上角,如果我没记错的话),我必须工作暂时围绕这个。至少我解决了最大的问题。

不过,我想知道是否有任何文档说明 PathElements 使用节点的相对位置来移动它。

关于java - PathTransition 没有像我想象的那样工作(使用 CubicCurveTo/ArcTo 和一般坐标的混淆),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60693433/

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