我正在通过尝试构建一个(非常)小平台游戏来学习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,因为动画从弧的右端开始并在左端结束。我尝试查看Arc和PathTransition的文档,但找不到任何可以帮我解决问题的内容。我在这里缺少什么?
答案 0 :(得分:1)
您为Arc
构造函数提供的最后两个值是弧的起始角度和角度长度(以度为单位)。相对于正x轴以逆时针方向测量角度。所以你从360度开始(当然相当于0度:即(centerX + radiusX, centerY)
)并逆时针(向上和向左)前进半圈。要向右跳,我认为您希望起始角度为180
,角度长度为-180
(负向旋转顺时针,半椭圆)。
注意PathTransition
通过更改其translateX
和translateY
属性,沿路径移动节点的中心。因此,要从负x轴顺时针旋转半圈到正x轴,需要centerX
作为形状的初始水平中心,加上radiusX
和{{1 }}是形状的初始垂直中心。
这是一个跳跃你想要的SSCCE(我想......)。我在centerY
而不是构造函数上使用了set
方法,只是为了清楚每个值的作用。如果您愿意,可以使用构造函数实现相同的功能。
Arc