JavaFX 将对象沿角度路径移动到特定值
JavaFX Move object along angled path to certain value
我没有基本代码或示例可以从这开始......只是在我的脑海中抛出这个想法。
所以我想要一个滑块之类的东西....在 30 度角并且需要一个条或对象沿着该路径移动到一定的百分比或值。
根据我有限的知识,我认为我需要使用插值器....但是我该从哪里开始呢?
我的目标是给该方法一个值,比如 1 到 100 之间。然后对象或栏将被动画化到路径上的那个位置。像条形图,但用作仪表。
只是更新....
我最终使用一些旧的数学方法走了一条更手动的路线。 :)
考虑到我知道杆需要移动多少,以及它需要移动多少角度。 Sin 和 Cos 是我的朋友。
好像反应很快,也很流畅!
double oldx = RBar.getX();
double oldy = RBar.getY();
double moveval = oldacc + averageACC;
double angle = -30 * Math.PI / 180;
double newx = oldx - moveval * Math.sin(angle);
double newy = oldy - moveval * Math.cos(angle);
double movex = newx + oldx;
double movey = newy + oldy;
Platform.runLater(new Runnable() {
@Override
public void run() {
final Timeline timeline = new Timeline();
timeline.setCycleCount(1);
timeline.setAutoReverse(true);
final KeyValue targetkvx = new KeyValue(RBar.translateXProperty(), movex);
final KeyValue targetkvy = new KeyValue(RBar.translateYProperty(), movey);
final KeyFrame kf = new KeyFrame(Duration.millis(100), targetkvx, targetkvy);
timeline.getKeyFrames().add(kf);
timeline.play();
}
});
oldacc = averageACC;
谢谢你让我走上了正确的道路!!!
我没有基本代码或示例可以从这开始......只是在我的脑海中抛出这个想法。
所以我想要一个滑块之类的东西....在 30 度角并且需要一个条或对象沿着该路径移动到一定的百分比或值。
根据我有限的知识,我认为我需要使用插值器....但是我该从哪里开始呢?
我的目标是给该方法一个值,比如 1 到 100 之间。然后对象或栏将被动画化到路径上的那个位置。像条形图,但用作仪表。
只是更新....
我最终使用一些旧的数学方法走了一条更手动的路线。 :) 考虑到我知道杆需要移动多少,以及它需要移动多少角度。 Sin 和 Cos 是我的朋友。
好像反应很快,也很流畅!
double oldx = RBar.getX();
double oldy = RBar.getY();
double moveval = oldacc + averageACC;
double angle = -30 * Math.PI / 180;
double newx = oldx - moveval * Math.sin(angle);
double newy = oldy - moveval * Math.cos(angle);
double movex = newx + oldx;
double movey = newy + oldy;
Platform.runLater(new Runnable() {
@Override
public void run() {
final Timeline timeline = new Timeline();
timeline.setCycleCount(1);
timeline.setAutoReverse(true);
final KeyValue targetkvx = new KeyValue(RBar.translateXProperty(), movex);
final KeyValue targetkvy = new KeyValue(RBar.translateYProperty(), movey);
final KeyFrame kf = new KeyFrame(Duration.millis(100), targetkvx, targetkvy);
timeline.getKeyFrames().add(kf);
timeline.play();
}
});
oldacc = averageACC;
谢谢你让我走上了正确的道路!!!