我试图让游戏每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次,一旦达到每秒一次就会停止切换然后再次启动它。
如果TIME
的值为1
,则一切正常。波浪每1秒钟变化一次
我正在使用0.8,因为我正在尝试实施难度选择(简单,中等,难度......)越难,波动的速度就越快。
代码是否是我问题的罪魁祸首?如果是,请为我解决。
答案 0 :(得分:1)
我们没有看到start
的类型,但我认为它是double
。如果是这样,罪魁祸首就是这一行:
start = (int) (cTime/1000); //cTime is the milisecond since game started
想象一下,cTime
为900,最后一波在时间0
开始(所以应该开始新浪潮)。然后,当这个新波开始时,您将设置start = (int)(900/1000);
这是截断整数除法,因此start
的新值为0
。但这与旧值相同 - 因此,由于没有任何变化,下次检查时间条件时,新波将立即重新开始。
不是进行整数除法,而是将整数cTime转换为double
并以浮点形式执行除法和比较:
start = ((double) cTime) / 1000.0;
// ...
if ((((double)cTime/1000.0) - start) >= TIME) { //changing speed
上面场景中start
的新值应该是0.9
,新轮次应该允许持续0.8秒。