JavaFX AnimationTimer运行太快(两次调用之间间隔0.5毫秒)

时间:2018-11-24 06:02:57

标签: java animation javafx stage

我试图用AnimationTimer调整舞台的大小。它非常结实(可能是1-2fps)。因此,我打印了两次handle()调用之间经过的时间。只有0.5ms。 144hz屏幕大约为7ms,60hz屏幕大约为16ms。 我有一个144hz屏幕和一个60hz屏幕连接到PC,并且我正在使用Windows 10。

由于setHeight每秒被调用近2k次,可能是口吃。

以下是一些代码:

    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毫秒安排一次计时器,从而使动画效果大致平稳。显然,这并不是完全平滑,因为7ms有点偏离并且没有与屏幕同步。

    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怎么了?

0 个答案:

没有答案