如何在libgdx中每60秒执行一次更新

时间:2017-04-24 19:36:57

标签: java android libgdx

如何在libgdx中每60秒执行一次更新。我试过这段代码,但实际上是#34; counter"直接变为0

public void update(float delta){

    stage.act(delta);
    counter-=Gdx.graphics.getRawDeltaTime();;
   if (counter==3)
    {   stage.addActor(oneImg);
    }
    else if(counter==2)
    {
        stage.addActor(twoImg);

    }
    else if(counter==1)
    {   stage.addActor(splashImg);
    }


}

1 个答案:

答案 0 :(得分:1)

是的,这将会发生。

这是因为libgdx的getRawDelta time方法返回浮点值。当你从柜台中扣除它们时,你可能永远不会得到完全舍入的数字,如1,2,3。

所以只是给你一个例子,假设你的计数器是3.29,getRawDeltaTime给你0.30 ..

如果你从3.29中扣除它,你最终会得到2.99,因此你永远不会打你的if语句。

我这样做的方式是

counter -= Gdx.graphics.getDeltaTime();

if(counter <= 3 && counter > 2) {   
    stage.addActor(oneImg);
} else if(counter <= 2 && counter > 1) {
    stage.addActor(twoImg);
} else if(counter <= 1 && counter > 0)  {
    stage.addActor(splashImg);
}

我希望上面的解决方案有意义。

还有一点需要指出我在解决方案中留下的内容。每个if条件将在我的解决方案中执行多次而不是一次。

这是因为当你说(counter <= 3 && counter > 2)时,计数器将具有2.9,2.87等值,即直到2到3之间的值。 要解决此问题,您需要使用一些布尔值。

定义班级boolean condition1, condition2, condition3;

将if语句修改为

if(counter <= 3 && counter > 2 && !condition1) {   
    stage.addActor(oneImg);
    condition1 = true;
} else if(counter <= 2 && counter > 1 && !condition2) {
    stage.addActor(twoImg);
    condition2 = true;
} else if(counter <= 1 && counter > 0 && !condition3)  {
    stage.addActor(splashImg);
    condition3 = true;
}