Slick2D每0.8渲染一次

时间:2013-10-15 12:59:49

标签: java double render slick2d milliseconds

我试图让游戏每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,因为我正在尝试实施难度选择(简单,中等,难度......)越难,波动的速度就越快。

代码是否是我问题的罪魁祸首?如果是,请为我解决。

1 个答案:

答案 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秒。