2016-08-01 84 views
0

我正在研究叫做Wireworld的康威生命游戏的一个变体,我想要一个滑块控件,以便用户可以随意更改模拟的速度。我想我只是有一个简单的数学打嗝,但我正在做的是获得当前nano时间和上次更新之间的差异,然后除以1,000,000,000(转换为秒),并检查它是否大于或大于等于更新时间(0.016667)除以速度滑块值(0.05和1.0之间的值)。如何使用滑块动态更改JavaFX AnimationTimer的速度?

下面是代码,因为我有它...

new AnimationTimer() { 
    private long lastUpdate = 0; 

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

,然后在更新周期结束后,我改变LASTUPDATE到currentNanoTime的价值。

这种方法有什么问题吗?动画以0.5的默认速度移动非常缓慢,并且在将滑块移动到极端时没有明显差异。

回答

0

看来问题出在哪里,我在条件式中投了两个多头。取而代之的是...

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

我需要做到这一点...

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

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