在游戏循环中改变价值

时间:2018-01-24 02:00:56

标签: java android libgdx game-loop

我有一个变量tail。我在创建构造函数时为此变量设置了一个值。我有一个changeTail()方法,它会定期改变尾部10个像素(增加10个像素,然后减少10个像素)。 在update方法中调用此方法,因此这是连续的。

我有另一种方法speedUp(),当分数增加10时,它会加快玩家的速度。要获得分数当前值,也会在update方法中调用此值。 所以,当我想加速游戏时,我也想让尾巴更长。所以我使用speedUp()为tail设置了一个新值。

但问题是,由于在speedUp()方法中调用了update,因此它会为tail设置相同的值,现在tail不会像使用的那样改变在加速前做。

这是我的代码:

class Game{
   float tail; 
   boolean increasing;  
   int score;  

   public Game(){
    tail = 60;
    increasing = false;
    score = 0;
   }

   public void changeTail(){
     if(increasing){
       tail += 1;
       if(tail >= 60){
         increasing = false;
       }
     }else{
       tail -= 1;
       if(tail <=50){
         increasing = true;
       }
     }    
   }

   public void speedUp(){

     if(score >= 20){
      //player speed up
      tail = 70;
     }

   }

   public void update(){
     tailChange();
     speedUp();
   }

}

2 个答案:

答案 0 :(得分:0)

添加其他变量maxTail,并在score> = 20时将其增加10.并且tailChange()tail之间改变maxTailmaxTail - 10

public class Game {

    float maxTail;
    float tail;
    boolean increasing;

    int score;
    int nextScoreGoal;

    public Game() {
        maxTail = 60;
        tail = maxTail;
        increasing = false;

        score = 0;
        nextScoreGoal = 20;
    }

    public void update() {
        tailChange();

        if (score >= nextScoreGoal) {
            nextScoreGoal += 20; // I assume that you will keep increasing tail?
            speedUp();
        }
    }

    public void tailChange() {
        if (increasing) {
            tail++;
            if (tail >= maxTail) {
                increasing = false;
            }
        } else {
            tail--;
            if (tail <= maxTail - 10) {
                increasing = true;
            }
        }
    }

    public void speedUp() {
        maxTail += 10;
        tail += 10;
    }
}

或者只是将speedUp()方法排除在update()之外,即在增加score的位置调用它。

答案 1 :(得分:0)

阅读本文后(https://answers.unity.com/questions/1193588/how-to-only-update-once-in-update-function.html)我找到了答案。所以,不是试图在speedUp()中设置tail的值,而是在得分增加时设置它。例如,当与砖碰撞时得分增加:

public void brickCollision(){
  if(/*check if collides with brick*/){
    score +=1;
    if(score >=20){
     tail = 70;
    }
  }

}

现在它完美无缺。时间来解决其他错误:)