0

我试图让游戏每 0.8 秒改变一次痣的波动。(我的游戏只是“打鼹鼠,用于练习)。

我改变波浪的代码:

double TIME = 0.8;

if (Next) { //If 0.8 seconds is up
        if (Over == false) { //make sure the game hasn't ended
            start = (int) (cTime/1000); //cTime is the milisecond since game started
            String wave = MolesWaves.RandomWave(); //getting the new wave data 
            initWave(wave); 
            Next = false; //disallow the game from changing wave
        }
    }
    else {
        if (((cTime/1000) - start) >= TIME) { //changing speed
            System.out.println("Test: " + ((cTime/1000)-start));
            Next = true; //allow game to change waves
        }
    }

System.out.println("Test: " + ((cTime/1000)-start));,这是我从输出日志中得到的。

Test: 0.802
Test: 0.817
Test: 0.833
Test: 0.852
Test: 0.867
Test: 0.883
Test: 0.9
Test: 0.917
Test: 0.933
Test: 0.95
Test: 0.967
Test: 0.983
Test: 1.0

问题是波浪每秒变化 13 次,一旦达到每秒,它就会停止切换一段时间,然后重新开始。
如果值为 ,TIME1一切正常。波浪每 1 秒变化一次。
我正在使用 0.8,因为我正在尝试实现难度选择(简单,中等,困难......)它越难,波浪变化越快。

上面的代码是我问题的罪魁祸首吗?如果是,请为我解决这个问题。

4

1 回答 1

1

我们看不到 的类型start,但我假设它是double. 如果是这样,罪魁祸首就是这一行:

start = (int) (cTime/1000); //cTime is the milisecond since game started

想象一下cTime是 900,最后一波开始时间0(所以应该开始新一波)。然后当这个新浪潮开始时,您将设置start = (int)(900/1000);This is a truncating integer division,因此 的新start值为0。但这与旧值相同——因此,由于没有任何变化,下一次检查时间条件时,新波将立即重新开始。

不进行整数除法,而是将整数 cTime 转换为 adouble并以浮点执行除法和比较:

start = ((double) cTime) / 1000.0;
// ...
if ((((double)cTime/1000.0) - start) >= TIME) { //changing speed

start上面场景中的新值应该是0.9,新一轮应该允许持续 0.8 秒。

于 2013-10-15T13:13:52.770 回答