Animation Timer JavaFX reset

Animation Timer JavaFX reset
W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
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

Kopiuj
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

Kopiuj
public class GameView extends Application {

    public void start(Stage primaryStage) {
        try {


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


            AnimationSnake animationSnake = new AnimationSnake();
            animationSnake.start();
}
}
MrMadMatt
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 373
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/

CS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 296
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.