JavaFX AnimationTimer работает слишком быстро (0,5 мс между вызовами) - PullRequest
0 голосов
/ 24 ноября 2018

Я пытался изменить размер сцены с помощью AnimationTimer.Это очень запутанно (возможно, 1-2 кадра в секунду).Поэтому я распечатал прошедшее время между вызовами handle ().Это всего лишь 0,5 мс.Должно быть около 7 мс для экрана 144 Гц и 16 для 60 Гц.У меня экран 144 Гц и экран 60 Гц, подключенный к ПК, и я использую Windows 10.

Возможно, он заикается, потому что setHeight вызывается почти 2 000 раз в секунду.

Вот код:

    AnimationTimer animationTimer = new AnimationTimer() {
        long lastTime;
        @Override
        public void handle(long now) {
            animationHeight++;
            setHeight(animationHeight);

            System.out.println(now - lastTime);
            lastTime = now;
            if (animationHeight >= totalHeight) {
                stop();
            }
        }
    };

    animationTimer.start();

Вывод на консоль:

    ...
    584303
    578683
    514300
    481597
    ...

Я пытался сделать то же самое с java.util.Timer.Я планировал таймер каждые 7 мс, что приводит к более или менее плавной анимации.Это явно не совсем гладко, потому что 7 мс немного смещены и не синхронизированы с экраном.

    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            animationHeight += 8;

            if (animationHeight >= totalHeight) {
                setHeight(totalHeight);
                cancel();
            }
            setHeight(animationHeight);
        }
    };
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(timerTask, 0, 7);

Что я делаю не так с AnimationTimer?

...