小编典典
在a中KeyValue,第一个参数应为a
WritableValue,例如circle.centerXProperty(),代表初始坐标,例如x。第二个参数应该是类型兼容的值,在这种情况下x,就是射弹应向其移动的坐标。随着时间线播放,WritableValue将会相应更新。添加一秒钟KeyValue以驱动y坐标。
在此处看到的第一个示例中,三个实例KeyValue将图形从其初始位置移动到其目的地位置,该位置是size沿每个坐标轴的单位。在此相关示例中,图形将形状点移动p1到p2。
在下面的例子中,Circle移动平行于x间轴100和500。同时,它们Circle平行于抛物线 y = –4( x –½)2
+1 定义的y轴之间300并100跟随其移动的轴,其顶点(1 / 2,1)且 x
在0和1处相交。根据API的要求,在单位正方形上实现抛物线路径模型的实现。您可以通过在关键帧中更改高度与宽度的比率来更改仰角,例如curve() __curve()``curve()
KeyValue xKV = new KeyValue(c.centerXProperty(), 200);
KeyValue yKV = new KeyValue(c.centerYProperty(), 0, new Interpolator() {…});
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
* @see https://stackoverflow.com/a/38031826/230513
*/
public class Test extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Test");
Group group = new Group();
Scene scene = new Scene(group, 600, 350);
scene.setFill(Color.BLACK);
primaryStage.setScene(scene);
primaryStage.show();
Circle c = new Circle(100, 300, 16, Color.AQUA);
Line l = new Line(100, 300, 500, 300);
l.setStroke(Color.AQUA);
group.getChildren().addAll(c, l);
final Timeline timeline = new Timeline();
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.setAutoReverse(false);
KeyValue xKV = new KeyValue(c.centerXProperty(), 500);
KeyValue yKV = new KeyValue(c.centerYProperty(), 100, new Interpolator() {
@Override
protected double curve(double t) {
return -4 * (t - .5) * (t - .5) + 1;
}
});
KeyFrame xKF = new KeyFrame(Duration.millis(2000), xKV);
KeyFrame yKF = new KeyFrame(Duration.millis(2000), yKV);
timeline.getKeyFrames().addAll(xKF, yKF);
timeline.play();
}
public static void main(String[] args) {
launch(args);
}
}
2020-10-16