Animation Timer JavaFX reset

0

Witam, mam problem ze zresetowaniem mojego wątka - Animation Timera. W mojej grze Snake po każdym nowym uruchomieniu gry szybkość wzrasta i nie mam pojęcia co moge zrobić, żeby ten wątek ładował się od nowa bez ponownego włączania programu.

//Animation Timer

public class AnimationSnake extends AnimationTimer {

   public long lastTick = 0;

    public void handle(long now) {

        if (lastTick == 0) {
//            System.out.println(now);
            lastTick = now;
            GameView.tick(GameView.getGc());
            return;
        }

        if (now - lastTick > 1000000000 / GameView.getSpeed()) {
            lastTick = now;
            GameView.tick(GameView.getGc());
        }
    }
}

//klasa wywołująca

public class GameView extends Application {

    public void start(Stage primaryStage) {
        try {


            getRoot().getChildren().add(c);


            AnimationSnake animationSnake = new AnimationSnake();
            animationSnake.start();
}
}
0

Użyj jakiegoś Execturor z FutureTask i przy nowej grze rób cancel() na Execturor. Na szybko co znalazłem do poczytania:
https://stackoverflow.com/questions/1418033/java-executors-how-can-i-stop-submitted-tasks
https://www.baeldung.com/thread-pool-java-and-guava
W przypadku JavyFX jak chcesz w tasku w tle coś aktualizować w GUI warto zapoznać się z metodą isFxApplicationThread(). Do poczytania:
https://examples.javacodegeeks.com/desktop-java/javafx/javafx-concurrency-example/

0

Próbuję zgadywać: czy przed restartem zerujesz ten lastTick?

1 użytkowników online, w tym zalogowanych: 0, gości: 1