DeltaTime无法正确更新?

时间:2015-09-18 07:30:25

标签: java libgdx

我在使用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

5 个答案:

答案 0 :(得分:2)

LibGDX' deltaTimefloat以及自上一帧以来经过的时间量(以秒为单位)。

您希望有一个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()函数中调用它。