gpt4 book ai didi

java - AnimationTimer 与 Transition 之间的区别

转载 作者:行者123 更新时间:2023-12-02 02:50:27 25 4
gpt4 key购买 nike

考虑这段代码:

import java.util.ArrayDeque;

import javafx.animation.AnimationTimer;
import javafx.animation.Transition;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.util.Duration;

public class FrameTest extends Application
{
private static final int SUBFRAMES = 1;
private static final int FRAME_SAMPLE = 10;
private long prevTime;
private long frame;
private ArrayDeque<Long> frameTimes = new ArrayDeque<>();
private double fps;
private int subframe;

public static void main(String[] args)
{
Application.launch(args);
}


public void frameTick()
{

long time = System.nanoTime();
if (prevTime != -1)
{
while (frameTimes.size() > FRAME_SAMPLE - 1)
frameTimes.remove();
frameTimes.add(time - prevTime);
double fps = 0;
for (long ftime : frameTimes)
fps += ftime * 1e-9;
fps = frameTimes.size() / fps;
this.fps = fps;
System.out.printf("%.9f\n", fps);
}
prevTime = time;

}



@Override
public void start(Stage primaryStage) throws Exception
{
Transition trans = new Transition()
{
{
setCycleCount(INDEFINITE);
setCycleDuration(Duration.ONE);
}

@Override
protected void interpolate(double frac)
{
frameTick();
}
};

AnimationTimer timer = new AnimationTimer()
{

@Override
public void handle(long now)
{
frameTick();
}
};

//Comment out either one
trans.play();
//timer.start();
}
}

它基本上计算动画计时器与过渡的帧速率。

当我使用 javafx.animation.Transition 运行此 FPS 计算器时,它会输出大约 600 ~ 100000 fps(很大的范围)。当我使用 AnimationTimer 对其进行测试时,它的帧率很好地达到了 60 fps 左右。

只是好奇,这两种方法之间的内部差异是什么导致了如此低的结果?

最佳答案

在转换过程中,您不是在测量实际帧速率;而是在测量实际帧速率。您只需测量调用 interpolate 的频率。场景仍将仅以 Prism 渲染机制限制的速率进行渲染(默认情况下上限为 60fps)。

因此,如果您的 interpolate 方法实际上更改了场景图,则并非所有这些更改实际上都会在场景上实现。

相比之下,AnimationTimerhandle() 方法实际上是作为场景渲染的一部分被调用的:因此保证它只执行一次每帧。

关于java - AnimationTimer 与 Transition 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43928678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com