我正在开发一款名为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下移动得非常慢,将滑块移动到极限时没有明显的差异。
答案 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,也会先进行除法,因此它将是一个整数,而不是一个精确的浮点数。我想我只需要休息一下并考虑一下。现在工作正常!