我的libgdx计时器太快地更新间隔

时间:2015-09-01 02:19:16

标签: java timer libgdx

我的libgdx计时器意味着每秒产生一个随机数,但是当我把计时器放在渲染方法中时,它比一秒更快地更新,我不知道如何解决这个问题。在我的游戏中灌木是假设在敌人射击之前沙沙作响,但这一切似乎都是立刻发生的。

    timer.scheduleTask( new Task(){ public void run(){
    rando =rn.nextInt(8);
    Gdx.app.log("the num is", Integer.toString(rando));
    if(rando == 0){
        bush.rustle();
        bush2.rustle2();
        bush3.dontrustle3();
        bush4.dontrustle4();
        enemy.shoot();
        enemy2.shoot();
        enemy3.godown();
        enemy4.godown();


    }
     if(rando == 1){
        bush.dontrustle();
        bush2.rustle2();
        bush3.rustle3();
        bush4.dontrustle4();
        enemy.godown();
        enemy2.shoot();
        enemy3.shoot();
        enemy4.godown();

    }
    if(rando == 2){
        bush.rustle();
        bush2.dontrustle2();
        bush3.rustle3();
        bush4.rustle4();
        enemy2.godown();
        enemy.shoot();
        enemy4.shoot();
        enemy3.shoot();


    }

    if(rando == 3){
        bush.rustle();
        bush2.rustle2();
        bush3.rustle3();
        bush4.rustle4();
        enemy.shoot();
        enemy2.goup();
        enemy4.goup();
        enemy3.shoot();

    }

    if(rando == 4){
        bush.rustle();
        bush2.rustle2();
        bush3.rustle3();
        bush4.rustle4();
        enemy2.godown();
        enemy.godown();
        enemy4.shoot();
        enemy3.shoot();


    }

    if(rando == 5){
        bush.rustle();
        bush2.rustle2();
        bush3.rustle3();
        bush4.rustle4();
        enemy2.godown();
        enemy.shoot();
        enemy4.godown();
        enemy3.shoot();


    }

    if(rando == 6){
        bush.rustle();
        bush2.rustle2();
        bush3.rustle3();
        bush4.rustle4();
        enemy2.godown();
        enemy.goup();
        enemy4.godown();
        enemy3.godown();


    }

    if(rando == 7){
        bush.rustle();
        bush2.rustle2();
        bush3.rustle3();
        bush4.rustle4();
        enemy2.shoot();
        enemy.goup();
        enemy4.shoot();
        enemy3.shoot();


    }




    }}, 1,1);

3 个答案:

答案 0 :(得分:2)

你的随机被称为每秒60次左右。和你的fps一样。 这是一个简单的伎俩。在你的渲染中创建一个计数器并递增它。当计数器%60 == 0然后产生一个随机数

 public void render(float deltaTime)
  {
   counter++;
   if(counter%60==0) // if u need more precision mode it by your fps
    {
     get a random number
     counter=0;
    }
   // code for render 
  }

希望这会有所帮助

答案 1 :(得分:0)

只是一个猜测,但这个代码在你的渲染循环中?如果是这样,您每帧都在创建一个新任务,因此您可以看到许多任务快速连续执行。

相反,您应该只调用scheduleTask一次(create或按下按钮或其他内容)。

答案 2 :(得分:0)

这个答案适合作为我建议的方便时间的信息。

我在目前的项目中与计时器进行了很多战斗..我完成计时器事务的最简单方法如下。

float 1second = 1000
float theEndTime = TimeUtils.millis() + 1second

以及稍后检查是否到达时间:

if(TimeUtils.millis() - theEndTime > 0){
    //do cool stuff, like shoot and reset the Timer, so it just shoots once
    //example:
    generateRandomNumber(); //now wait another second!
    theEndTime = TimeUtils.millis() + 1second //that simple??
}

正如你所看到的,你对你的行为有毫秒的控制权。

你可以使用这个非常复杂的计时器生成,每个人都可以通过一个过程,只要你愿意,而不是与任何东西混淆。

希望有所帮助!