目前在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();
答案 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();
}