如何使用Slider动态更改JavaFX AnimationTimer的速度?

时间:2016-08-01 20:53:44

标签: java javafx

我正在开发一款名为Wireworld的Conway生命游戏的变体,我希望有一个滑块控件,以便用户可以随意改变模拟的速度。我想我只是有一个简单的数学打嗝,但我正在做的是获得当前纳米时间和上次更新之间的差异,然后除以1,000,000,000(转换为秒),并检查它是否&# 39; s大于或等于更新时间(0.016667)除以速度滑块值(0.05和1.0之间的值)。

这是我拥有的代码......

new AnimationTimer() {
    private long lastUpdate = 0;

    public void handle(long currentNanoTime) {
        if((double)((currentNanoTime - lastUpdate) / 1000000000) >= (updateTime / speedSlider.getValue())) {

然后在更新周期结束时,我将lastUpdate更改为currentNanoTime的值。

这种方法有问题吗?动画在默认速度0.5下移动得非常慢,将滑块移动到极限时没有明显的差异。

1 个答案:

答案 0 :(得分:0)

似乎问题在于我在条件中投射了两个长点。而不是......

Dim rowNumber As Long
For rowNumber = 0 To (ListBox1.ListCount - 1)
    If ListBox1.Selected(rowNumber) Then
        ' do something
    End If
Next rowNumber

我需要这样做......

if((double)((currentNanoTime - lastUpdate) / 1000000000) >= (updateTime / speedSlider.getValue())) {

我怀疑这是问题所在。问题在于,就像整数除法一样,即使将其转换为double,也会先进行除法,因此它将是一个整数,而不是一个精确的浮点数。我想我只需要休息一下并考虑一下。现在工作正常!