获取JavaFX应用程序帧速率的首选方法是什么?
发布时间:2020-07-21 10:35:27 所属栏目:Java 来源:互联网
导读:这是一个非常简单的问题: 获取JavaFX应用程序帧速率的首选方法是什么? 谷歌出现了2009年的结果,但这个例子与JavaFX 1.x有关,并且以一种奇怪的方式(某种外部仪表)开始运行.我无法找到更好的例子,我在这里发帖. 我希望能够查询我的JavaFX应用程序(或者如果需
这是一个非常简单的问题: 获取JavaFX应用程序帧速率的首选方法是什么? 谷歌出现了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); } } (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如果您在Java中显式初始化Object数组,那么包含与新的Object
- jsp+servlet+jdbc实现对数据库的增删改查
- orm – Laravel中的许多关系:belongsToMany()vs. hasManyT
- java – IntelliJ switch语句使用字符串错误:use -source
- java – 在spring mvc中按名称获取cookie值
- JPA 2.1:Java 8 Date / Time API简介
- 如何获取javacv中提取的对象的x,y坐标?
- JavaFX – 如何创建SnapShot /(invisble)WebView的屏幕截图
- 如何在Java中更改默认的类加载器?
- 表现 – 破解JVM以避免不必要的边界检查和投射