gpt4 book ai didi

java - 如果条件为真,Libgdx 计时器每 5 秒一次,直到条件为真

转载 作者:行者123 更新时间:2023-12-01 12:43:19 25 4
gpt4 key购买 nike

我正在制作我的第一个 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 时,我调用 checkIfEnergyIsZero 函数,这就是我需要帮助的地方:

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);


}



}

所以这段代码基本上是,当我按住shift冲刺时,将curEnergy减少1,然后如果curEnergy为0,它会创建一个在10秒后运行的计时器,但我想要它做的是:当能量为0时,等待5秒,添加10个能量,然后再次等待5秒,添加10个能量,然后等待5秒,添加10个能量,依此类推,直到curEnergy整数等于当前设置的maxEnergy Integer 100;

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

非常感谢!

最佳答案

另一种方法是设置截止时间,然后每次通过渲染循环检查它,而不是在 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.
}

这样您就可以轻松更改日程安排。因此,例如,如果玩家使用了一些能量,您可能需要从现在开始重新安排 5 秒的碰撞:

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

我认为这比触发计时器并取消它们并更改它们的超时更容易操作。

关于java - 如果条件为真,Libgdx 计时器每 5 秒一次,直到条件为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24892623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com