Последовательность анимации javafx

85
17 марта 2022, 09:40

Вопрос вот в чем: Есть класс Controller и FXML. У кнопки "бросить кубик" есть event onMouseClicked выполняющий метод thrw() в Controller. Тот в свою очередь выполняет две анимации одинаковые но для разных Label таким образом:

package app;
    import javafx.fxml.FXML;
    import javafx.scene.control.Button;
    import javafx.scene.control.Label;
    import javafx.scene.input.MouseEvent;
    public class Controller {
        @FXML
        public Button thrwBtn;
        @FXML
        public Label cubeLabel;
        @FXML
        public Label bonusLabel;
        public void thrw(MouseEvent mouseEvent) {
//две по очереди
            AnimationHandler.throwCube(cubeLabel);
            AnimationHandler.chargeBonus(bonusLabel);
        }
    }

AnimationHandler - класс со статическими методами в который я инкапсулировал всю анимацию игры, чтобы не загромождать Controller.

Вот код в AnimationHandler:

package app;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.scene.control.Label;
import javafx.util.Duration;
public class AnimationHandler {
    public static void throwCube(Label label) {
        //мигание Label
        int frame = 0;
        Timeline timeline = new Timeline();
        for (int i = 0; i < 160; i++) {
            timeline.getKeyFrames().add(new KeyFrame(Duration.millis(frame), new KeyValue(label.visibleProperty(), false)));
            timeline.getKeyFrames().add(new KeyFrame(Duration.millis(frame+4), new KeyValue(label.visibleProperty(), true)));
            frame = frame+5;
        }
        timeline.play();
    }
    public static void chargeBonus(Label label) {
        //мигание Label (код точь-в-точь)
        int frame = 0;
        Timeline timeline = new Timeline();
        for (int i = 0; i < 160; i++) {
            timeline.getKeyFrames().add(new KeyFrame(Duration.millis(frame), new KeyValue(label.visibleProperty(), false)));
            timeline.getKeyFrames().add(new KeyFrame(Duration.millis(frame+4), new KeyValue(label.visibleProperty(), true)));
            frame = frame+5;
        }
        timeline.play();
    }
}

Две этих анимации выполняются ВМЕСТЕ, мигают два Label одновременно, хоть и написаны в разных методах. Как сделать, чтобы одна анимация ждала другую?

Answer 1

Решение нашел после уточняющего комментария Tsyclop.

Код анимаций тоже приложите.

Дело в анимации. Обе начинаются с 0 кадра. Поэтому и Label'ы мигают одновременно. А если иногда надо будет поставить, чтобы играла только вторая анимация, то это уже простым ifом можно добиться в коде контроллера. В общем спасибо всем за понимание!

READ ALSO
Веб сервер Java

Веб сервер Java

Имеется Java сервер на HerokuПолучает запрос и должен вернуть некую строку, по сути Json

153