我在使用deltaTIme时遇到了麻烦,基本上我要做的就是每秒向变量添加1。
private int num=0
private float deltaTime=Gdx.graphics.getDeltaTime();
public void render(){
deltaTime=Gdx.graphics.getDeltaTime();// updating
num += 1*deltaTime;
System.out.println(num);
}
,输出就是这个
0
0.016612083 //it does not add 1 to num every second
0
0.016679354
0
0.016680228
0
0.016672073
0
答案 0 :(得分:2)
LibGDX' deltaTime
是float
以及自上一帧以来经过的时间量(以秒为单位)。
您希望有一个float
变量来跟踪时间,因为int
无法在此工作。
float timePassed = 0f;
public void render() {
timePassed += Gdx.graphics.getDeltaTime();
if (timePassed >= 1f) {
// one second has passed and you can do something
}
}
答案 1 :(得分:1)
使用num ++是错误的,因为每次调用render-function时它只会向num添加1。 我看不到你的代码中有什么问题,所以可能没有正确更新增量时间。
答案 2 :(得分:1)
问题是,你的num是int
。因此,切割分数,导致num始终为零
解决方案:将num设为float
,每个渲染循环将增加delta。
基本上我正在做的是每秒加1我不明白为什么现在不工作
您不是,您在每个渲染循环中添加delta。要执行您想要执行的操作,请仅保留float elapsedTime
并增加num
,如果elapsedTime
大于1.则将elapsedTime
减1。
private int num;
private float elapsedTime;
public void render() {
elapsedTime+=Gdx.graphics.getDelta();
if (elapsedTime >= 1f) {
num++;
elapsedTime-=1f;
System.out.println(num);
}
}
希望它有所帮助。
答案 3 :(得分:1)
这是另一种方法。将num
放入浮点数并在需要整个秒时将其强制转换为int。
float num;
public void render(){
//...
num += deltaTime;
if ((int)num >= SOME_CRITERION)
doSomething();
}
答案 4 :(得分:0)
使用计时器。
Task task = new Task() {
@Override
public void run() {
num++;
}
};
//Here we start the timer
timer = new com.badlogic.gdx.utils.Timer();
//We execute 'task' every second with 0 delay
timer.scheduleTask(task, 0, 1);
你只需要调用一次,所以你不应该在render()函数中调用它。