LibGDX在更新方法期间做了一次

时间:2016-01-10 05:08:36

标签: java libgdx

我对Java和LibGDX有点新意,我正在开发基于点的游戏。我面临的一个问题是更新方法不断运行我想要及时运行的东西。在我的更新方法中,如果获得一个积分,我会有代码来增加分数,并且当玩家输掉时,我会让失败状态出现。没有详细说明,这里是我的伪代码:

 protected void update(float dt){

    for(Thing x : a list) {

        x.update(dt);

        //continue
        if (you complete the objective of the game) {
            score++;
            //do other stuff
        }


        //lost
        if (you fail to complete the objective){
            make lose state come up
        }
     }

//I want something like this to run:
if(score >=0 && score <=10){
  do something ONCE(ie. print to console once)
}
if(score >= 11 && score <=15){
  do something once
}
if(ect...){
  do something else once
}
.
.
.

这里的问题是,如果满足IF条件,我会注意到IF块很快被执行多次(即很多次打印到控制台)。我已经在单独的类中附上了依赖于得分的代码的细节,我只是希望能够从这个更新方法调用该方法并根据得分条件运行一次(即,如果得分满足另一个IF声明)

2 个答案:

答案 0 :(得分:1)

我有同样的问题,但我通过使用以下方法解决了它。在Libgdx中,更新方法在1/60秒内运行。这就是该方法不断渲染的原因,if条件将在不同时间执行。 要解决此问题,只需在count方法中声明一个整数变量,例如create

public static int count;
public static void create()
{
    count =0;
    // do other stuffs
}
protected void update(float dt){
    // just increment this count value in your update method
    for(Thing x : a list) {
        count++
        x.update(dt);
        //continue
        if (you complete the objective of the game) {
            score++;
            //do other stuff
        }
        //lost
        if (you fail to complete the objective){
            make lose state come up
        }
    }
    // and make a small condition to run the if condition only once by using  the declared variable "count".
    if(count%60==0){
        // here the condition only executes when the count%60==0.that is only once in 1/60 frames.
        if(score >=0 && score <=10){
        }
        if(score >= 11 && score <=15){
        }
        if(ect...){
        }
    }

。 。 。这就是我解决同样问题的方法。

答案 1 :(得分:0)

每个帧调用update()方法,在无限循环中非常快速地(通常每秒60次)调用多次。这不仅在libGDX中具体,而且在任何游戏引擎中都是特定的。当if块的某些条件评估为true时,每帧执行if块,直到该条件再次变为false。但是你想在条件改变后只执行一次。

只需声明一个名为isLastScoreUnder10或其他的变量,然后在if块之后更新它。像这样:

private boolean isLastScoreUnder10 = false;

protected void update(float dt){

    if(!isLastScoreUnder10 && score >=0 && score <=10){
        isLastScoreUnder10 = true;

        // ..do something

    } else {
        isLastScoreUnder10 = false;
    }
}