如何在JavaFX中更改PathTransition上节点的起始位置?

时间:2015-05-19 13:48:05

标签: java animation javafx

我正在通过尝试构建一个(非常)小平台游戏来学习JavaFX。我认为通过沿Arc形状使用PathTransition来模拟跳跃可能是个好主意。像这样:

import javafx.util.Duration;
import javafx.animation.PathTransition;
import javafx.scene.shape.Arc;

public void jump() {
    PathTransition jump = new PathTransition();
    Arc path = new Arc(
        figure().getX() + 20, //figure is a custom shape
        figure().getY() + figure().getHeight() / 2, 
        20, 80, 360, 180); 
    jump.setPath(path);
    jump.setNode(figure);
    jump.setAutoReverse(false);
    jump.setDuration(Duration.millis(3000));
    jump.setCycleCount(1);
    jump.play();
}

事件处理程序:

figure.setOnKeyPressed((e) -> {
    if (e.getCode() == KeyCode.SPACE) {
        jump();
    }
});

我发现这样做实际上会使我的身材跳转到BACKWARDS,因为动画从弧的右端开始并在左端结束。我尝试查看ArcPathTransition的文档,但找不到任何可以帮我解决问题的内容。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您为Arc构造函数提供的最后两个值是弧的起始角度和角度长度(以度为单位)。相对于正x轴以逆时针方向测量角度。所以你从360度开始(当然相当于0度:即(centerX + radiusX, centerY))并逆时针(向上和向左)前进半圈。要向右跳,我认为您希望起始角度为180,角度长度为-180(负向旋转顺时针,半椭圆)。

注意PathTransition通过更改其translateXtranslateY属性,沿路径移动节点的中心。因此,要从负x轴顺时针旋转半圈到正x轴,需要centerX作为形状的初始水平中心,加上radiusX和{{1 }}是形状的初始垂直中心。

这是一个跳跃你想要的SSCCE(我想......)。我在centerY而不是构造函数上使用了set方法,只是为了清楚每个值的作用。如果您愿意,可以使用构造函数实现相同的功能。

Arc