Уменьшение int с 10 до 0 каждую секунду в Java - PullRequest
0 голосов
/ 23 января 2019

Я определяю

int x = 10;

Теперь я хочу, чтобы x уменьшался каждую секунду до 0:

if (Obstacle.activeItem == true) {
        game.font.draw(game.batch, "Item active for: " + x, 100, 680);
}

Как я могу это сделать?

Я видел, как люди делают подобные вещи, используя Class Timer, но я не знаю, как это должно выглядеть в этом случае.

Я пытался

int x = 10;
ScheduledExecutorService execService = Executors.newScheduledThreadPool(1);

А потом

if (Obstacle.activeItem == true) {
            game.font.draw(game.batch, "Item active for: " + x, 100, 680);
}
execService.scheduleAtFixedRate(new Runnable() {
    public void run() {
        x--;
    }
}, 0L, 10L, TimeUnit.SECONDS);

Но это не работает так, как я хочу.

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Вы пометили свой вопрос с помощью libGdx, поэтому я думаю, что вы работаете с libgdx. Вместо создания дополнительного ExecutorService, почему вы не используете метод update(float delta) для уменьшения вашего таймера?

private float timer = 10;
@Override
public void render(float delta) {

    timer -= delta;

    if (Obstacle.activeItem == true) {
        font.draw(batch, "Item active for: " + (int)timer, 100, 680);
    }
}
0 голосов
/ 24 января 2019

если это libGdx, у меня есть какой-то рабочий код sphagetti для вас:

int reducedInt = 10;
bool isReduce = false;
float timer = 1f;

в Render

timer -= delta;


if(timer<=0){

isReduce = true;
timer = 1;

}
if(isReduce){

reducedInt--;
isReduce = false;

}

Это классический код таймера sphagetti LibGDX.Поскольку вы отметили его как LibGDX.

0 голосов
/ 23 января 2019

Вот пример того, как вы можете реализовать функциональность типа Timer с помощью Executors

public class Main {
    static int x = 10;

    public static void main(String[] args) {
        ScheduledExecutorService execService = Executors.newScheduledThreadPool(1);
        execService.scheduleAtFixedRate(() -> {
            System.out.println(x);
            x--;
            if (x == 0)
                execService.shutdownNow();
        }, 1L, 1L, TimeUnit.SECONDS); //initial delay, period, time unit
    }
}

Настоятельно рекомендуется прочитать об Исполнителях. Считайте это подсказкой и соответственно применяйте ее в вашем случае использования.

...