gpt4 book ai didi

java - 使用 JavaFX 调节每秒执行次数

转载 作者:行者123 更新时间:2023-12-02 03:57:37 26 4
gpt4 key购买 nike

所以现在我正在使用 JavaFX 实现 Conway 的生命游戏。简而言之,在我扩展AnimationTimer的类中,在handle()方法中,它遍历2D数组中的每个单元格并更新每个位置,然后使用2D数组中的信息绘制到 Canvas 。

这工作得很好,但问题是它运行得太快了。你无法真正看到 Canvas 上发生了什么。窗口上有 Canvas 和一些按钮。我添加了 Thread.sleep(1000) 来尝试调节每秒生成/帧,但这样做会导致窗口无法立即检测到按钮按下。当不告诉线程 hibernate 时,按钮按下完全响应。

有人对如何解决这个问题有任何建议吗?

最佳答案

您可以使用Timeline这可能更适合这个。将周期计数设置为 Animation.INDEFINITE,并添加一个 KeyFrame,其中包含您想要的更新之间的延迟,以及当前的 handle 实现作为帧的 onFinished

final Timeline timeline = new Timeline();
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.getKeyFrames().add(
new KeyFrame(
Duration.seconds(1),
event -> handle()
)
);
timeline.play();

或者,您可以尝试将KeyFrame的延迟设置为零,并使用时间轴的targetFrameRate,但我个人从未尝试过。

编辑:另一种选择是在 AnimationTimer 中保留 frameSkip 变量:

private int frameSkip = 0;
private final int SKIP = 10;

@Override
public void handle(long now) {
frameSkip++;
if (frameSkip <= SKIP) {
// Do nothing, wait for next frame;
return;
}
// Every SKIP frames, reset frameSkip and do animation
frameSkip = 0;

// Do animation...
}

关于java - 使用 JavaFX 调节每秒执行次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35280672/

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