Timeline for parabolic trajectory in JavaFX

后端 未结 1 665
自闭症患者
自闭症患者 2020-12-11 14:15

I\'m sorry, but I continue not understanding. My problem is I know nothing about physics but my teacher assigned to me this project.

private void shoot() {           


        
相关标签:
1条回答
  • 2020-12-11 14:44

    In a KeyValue, the first parameter should be a WritableValue, e.g. circle.centerXProperty(), which represents the initial coordinate, say x. The second parameter should be a type compatible value, in this case the x coordinate toward which the projectile should move. As the timeline plays, the WritableValue will be updated accordingly. Add a second KeyValue to drive the y coordinate.

    In the first example seen here, three instances of KeyValue move a figure from it's initial position to its destination position, which is size units away along each coordinate axis. In this related example, a figure moves form point p1 to p2.

    In the example below, a Circle moves parallel to the x axis between 100 and 500. At the same time, that same Circle moves parallel to the y axis between 300 and 100 following the curve() defined by the parabola y = –4(x – ½)2 + 1, which has vertex (½, 1) and x intercepts at 0 and 1. This implementation of curve() models a parabolic path on a unit square, as required by the curve() API. You can change the angle of elevation by changing the ratio of height to width in the keys frames, e.g.

    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);
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题