每次单击按钮时如何才能使时间轴更快?

时间:2018-04-04 16:33:42

标签: javafx

目前在JavaFX中遇到问题,尝试创建一个cookie点击器游戏,所以我创建了一个按钮" Clicker"自动,每5秒一次,点击cookie。我试图让我的时间轴每次购买另一个点击器时快0.1秒,目前,我一直在尝试这样:

        private double clickerSpeed = 5.1;

        Timeline clickerPoints = new Timeline();
        KeyFrame kfClicker = new KeyFrame(Duration.seconds(clickerSpeed), 
        event -> {
             cookieClicker.cookies += cookieClicker.cursor.getProdRate();
             cookieButton.setText("Cookies = " + cookieClicker.cookies);
        });
        clickerPoints.getKeyFrames().add(kfClicker);
        clickerPoints.setCycleCount(Timeline.INDEFINITE);


        buyClicker.setOnAction(event -> {
            if (clickerSpeed >= 1 && cookieClicker.cookies >= 
            cookieClicker.clicker.getCosts()) {
            clickerSpeed -= 0.1; ## In theory, this should make the keyframe faster?
            }
        cookieClicker.buyClicker();
        clickerLabel.setText(cookieClicker.clicker.getName() + "s: " + 
        cookieClicker.clicker.getLevel());
        buyClicker.setText("Buy clicker for: " + 
        cookieClicker.clicker.getCosts());
        cookieButton.setText("Cookies = " + cookieClicker.cookies);
        clickerPoints.play();

1 个答案:

答案 0 :(得分:1)

修改基元double对之前读取的值没有任何影响;持续时间不会自动调整。

要加快Timeline,您应该修改rate属性。

以下示例显示如何更新动画所需的持续时间,以1秒的步长将Rectangle的衰落从10秒变为1秒:

@Override
public void start(Stage primaryStage) throws Exception {
    Rectangle rect = new Rectangle(100, 100);
    Button btn = new Button("Speed Up");
    HBox root = new HBox(rect, btn);
    Timeline timeline = new Timeline(
            new KeyFrame(Duration.ZERO, new KeyValue(rect.opacityProperty(), 1d)),
            new KeyFrame(Duration.seconds(10), new KeyValue(rect.opacityProperty(), 0d))
    );
    timeline.setCycleCount(Animation.INDEFINITE);
    timeline.play();

    btn.setOnAction(new EventHandler<ActionEvent>() {

        private double duration = timeline.getCycleDuration().toSeconds();

        @Override
        public void handle(ActionEvent event) {
            if (duration > 1) {
                duration--;
                timeline.setRate(timeline.getCycleDuration().toSeconds() / duration);
            }
        }
    });

    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.show();
}
相关问题