Вопрос по java – установить задержку в игре libgdx

7

У меня есть игра (например, Super Jumper, эта игра - игра с прыжками), в которой у нашего персонажа есть жизнь. после столкновения с врагами его жизнь уменьшится. и я хочу через 1 секунду вычислить столкновения. Я имею в виду в течение 1 секунды, если мой персонаж соприкоснется с врагами, ничего не произойдет, и он продолжит свой путь. для этого я определяю логическую переменную в своем классе GameScreen, имя & quot; столкновение & quot; и еще один в классе Wolrd, имя «collBirds». после одного контакта с врагом столкновение и collBirds изменяются на true. но я хочу, чтобы после 1 секунды столкновение изменилось на ложное. я использую несколько вещей, таких как System.currentTimeMillis () и «для цикла», и ничего не происходит. Я не так хорош в Java.

это мое состояние:

if(World.collBirds == true && collition == false){
        life -= 1;
        lifeString = "Life : " + life;
        World.collBirds = false;
        collition = true;
        for (??? "need to stay here for 1 sec" ???) {
            collition = false;
        }
    }
TNX за ваш ответ. Я читаю это и использую это. но я изменил что-то в своей игре, и наконец это сработало. Hosein
Проверять, выписыватьсяthis question Piotr Praszmo

Ваш Ответ

3   ответа
0

Если вы хотите сделать это в том же потоке, чем вы можете использовать Thread.sleep (). Но в этом случае ваш текущий поток будет зависать, и если это игра с одним потоком, то вся ваша игра будет зависать. Если вы не хотите, чтобы ваша игра зависала на 1 секунду, вам нужно создать поток и в этом потоке вызвать sleep, а после sleep изменить флаг.

6

Когда происходит первое столкновение, установитеfloat timeSinceCollision = 0;

Затем в каждом цикле вам нужно будет добавить время с момента последней проверки в переменную и проверить, не превышает ли оно секунды.

timeSinceCollision += deltaTime;
if(timeSinceCollision > 1.0f) {
    // do collision stuff
} else {
    // ignore the collision
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Hosein
33

В некоторых случаях вы также можете использоватьcom.badlogic.gdx.utils.Timer

Пример использования:

float delay = 1; // seconds

Timer.schedule(new Task(){
    @Override
    public void run() {
        // Do your work
    }
}, delay);

Похожие вопросы