Java 如果条件为真,则每5秒执行一次Libgdx计时器,直到条件为真

Java 如果条件为真,则每5秒执行一次Libgdx计时器,直到条件为真,java,timer,libgdx,Java,Timer,Libgdx,我正在制作我的第一个LibGdx游戏,我的能量系统需要帮助。 因此,在我的玩家课程中,我有一个: int curEnergy = 100; int maxEnergy = 100; boolean allowRegen = false; 然后我有我的移动代码: if (Gdx.input.isKeyPressed(Keys.W)) { if (curEnergy > 0) { if (Gdx.input.isKeyPressed

我正在制作我的第一个LibGdx游戏,我的能量系统需要帮助。 因此,在我的玩家课程中,我有一个:

int curEnergy = 100;

int maxEnergy = 100;

boolean allowRegen = false;
然后我有我的移动代码:

if (Gdx.input.isKeyPressed(Keys.W)) {
            if (curEnergy > 0) {
                if (Gdx.input.isKeyPressed(Keys.SHIFT_LEFT)) {
                    position.y += 2.5f;
                    curEnergy--;
                }
            } else {
                allowRegen = true;
                checkIfEnergyIsZero();

            }
            position.y += 2f;
        }

        if (Gdx.input.isKeyPressed(Keys.A)) {
            if (curEnergy > 0) {
                if (Gdx.input.isKeyPressed(Keys.SHIFT_LEFT)) {
                    position.x -= 2.5f;
                    curEnergy--;
                }
            } else {
                allowRegen = true;
                checkIfEnergyIsZero();
            }
            position.x -= 2f;
        }

        if (Gdx.input.isKeyPressed(Keys.D)) {
            if (curEnergy > 0) {
                if (Gdx.input.isKeyPressed(Keys.SHIFT_LEFT)) {
                    position.x += 2.5f;
                    curEnergy--;
                }
            } else {
                allowRegen = true;
                checkIfEnergyIsZero();
            }
            position.x += 2f;
        }

        if (Gdx.input.isKeyPressed(Keys.S)) {
            if (curEnergy > 0) {
                if (Gdx.input.isKeyPressed(Keys.SHIFT_LEFT)) {
                    position.y -= 2.5f;
                    curEnergy--;
                }
            } else {
                allowRegen = true;
                checkIfEnergyIsZero();
            }
            position.y -= 2f;
        }

    }
因此,当我的curEnergy为0时,我调用CheckIfEnergySizero函数,这就是我需要帮助的地方:

public void checkIfEnergyIsZero() {
        if (allowRegen) {
            float delay = 10; // seconds




            Timer.schedule(new Task() {
                @Override
                public void run() {
                    if (curEnergy == 0) {
                        for (int i = 0; i < maxEnergy; i++) {
                            curEnergy += 1;
                            allowRegen = false;
                        }
                    }
                }
            }, delay);


        }



    }
public void checkIfEnergyIsZero(){
if(allowRegen){
浮动延迟=10;//秒
Timer.schedule(新任务(){
@凌驾
公开募捐{
如果(能量==0){
对于(int i=0;i
这段代码基本上是,当我通过按住shift键进行冲刺时,将curEnergy减少1,然后如果curEnergy为0,它会生成一个在10秒后运行的计时器,但我希望它做的是: 当能量为0时,等待5秒并添加10个能量,然后再次等待5秒并添加10个能量,然后等待5秒并添加10个能量,依此类推,直到curEnergy整数等于当前设置为100的maxEnergy整数

如果我忘记添加一些代码,请告诉我


多谢各位

另一种方法是设置截止日期,然后每次通过渲染循环检查它,而不是在N秒后触发计时器。因此,在循环的顶部执行以下操作:

long now = com.badlogic.gdx.utils.TimeUtils.millis();
获取当前时间。然后检查是否需要增加能量:

if (energyBumpTime != 0 && energyBumpTime <= now) {
   curEnergy += 5; // perhaps check for hitting the max limit.

   energyBumpTime = 0; // to disable
   // OR 
   energyBumpTime = now + (5 * 1000); // schedule another bump in 5 seconds.
}
我认为这比启动计时器、取消计时器和更改计时器超时更容易操作

   curEnergy -= 1; // use a bit
   energyBumpTime = now + (5 * 1000); // and delay the regeneration