我的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);
答案 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??
}
正如你所看到的,你对你的行为有毫秒的控制权。
你可以使用这个非常复杂的计时器生成,每个人都可以通过一个过程,只要你愿意,而不是与任何东西混淆。
希望有所帮助!