gpt4 book ai didi

javafx - 获取 JavaFX 应用程序帧速率的首选方法是什么?

转载 作者:行者123 更新时间:2023-12-04 10:17:32 25 4
gpt4 key购买 nike

这是一个很简单的问题:

获取 JavaFX 应用程序帧速率的首选方法是什么?

Google 找到了 2009 年的结果,但该示例与 JavaFX 1.x 相关,并且以一种奇怪的方式(某种外部仪表)开始运行。找不到更好的例子,我在这里发帖。

我希望能够查询我的 JavaFX 应用程序(或如果需要,当前场景)并获取当前 FPS 是多少。

更新 : 2015年2月8日

下面发布了该问题的各种解决方案作为答案。我还发现以下博文引用了这个问题:http://tomasmikula.github.io/blog/2015/02/08/measuring-fps-with-reactfx.html

其中说(由于以下解决方案的冗长)测量 FPS 已添加到 ReactFX 2.0 里程碑 2。很酷的事情是如何发展的。

最佳答案

您可以使用 AnimationTimer .
AnimationTimer的 handle 方法在每一帧上调用一次,传入的值是以纳秒为单位的当前时间(最佳近似值)。因此,您可以跟踪距离上一帧的时间。

这是一个跟踪最后 100 帧的时间并使用它们计算帧速率的实现:

import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class SimpleFrameRateMeter extends Application {

private final long[] frameTimes = new long[100];
private int frameTimeIndex = 0 ;
private boolean arrayFilled = false ;

@Override
public void start(Stage primaryStage) {

Label label = new Label();
AnimationTimer frameRateMeter = new AnimationTimer() {

@Override
public void handle(long now) {
long oldFrameTime = frameTimes[frameTimeIndex] ;
frameTimes[frameTimeIndex] = now ;
frameTimeIndex = (frameTimeIndex + 1) % frameTimes.length ;
if (frameTimeIndex == 0) {
arrayFilled = true ;
}
if (arrayFilled) {
long elapsedNanos = now - oldFrameTime ;
long elapsedNanosPerFrame = elapsedNanos / frameTimes.length ;
double frameRate = 1_000_000_000.0 / elapsedNanosPerFrame ;
label.setText(String.format("Current frame rate: %.3f", frameRate));
}
}
};

frameRateMeter.start();

primaryStage.setScene(new Scene(new StackPane(label), 250, 150));
primaryStage.show();
}

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

关于javafx - 获取 JavaFX 应用程序帧速率的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28287398/

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