Итак, у меня есть несколько примеров, когда я хочу, чтобы «заморозить» состояние моей игры. Это скроллер сверху вниз, и я хочу дать игроку возможность приостановить прокрутку экрана в течение короткого времени, используя powerup (если вы упадете в нижнюю часть экрана, который вы умрете). Я также хочу приостановить игру, поскольку она начинается, и нарисуйте 3, 2, 1, идите! чтобы дать игроку время, чтобы подготовиться, потому что прямо сейчас, как только вы нажмете игру, экран начнет прокрутку.Как я могу надежно приостановить состояние игры?
Я использую таймер для выполнения этого, однако он не работает, если я хочу заморозить экран в последовательных случаях. Как если игрок использует замораживание, экран успешно замерзает, но если они быстро используют другое замораживание, это не сработает. Кажется, происходит непреднамеренное охлаждение. У меня есть аналогичная проблема для «задержки ввода», которую я объяснил ранее. По какой-то причине он работает только на первых двух уровнях. Вот как я использую таймер.
if(gameState != STATE.frozen) {
camera.translate(0, (float) scrollSpeed);
staminaBar.setPosition(staminaBar.getX(), (float) (staminaBar.getY()+scrollSpeed));
staminaMeter.setPosition(staminaMeter.getX(), (float) (staminaMeter.getY()+scrollSpeed));
healthBar.setPosition(healthBar.getX(), (float) (healthBar.getY()+scrollSpeed));
healthMeter.setPosition(healthBar.getX(), (float) (healthMeter.getY()+scrollSpeed));
boostBar.setPosition(boostBar.getX(), (float) (boostBar.getY()+scrollSpeed));
boostMeter.setPosition(boostMeter.getX(), (float) (boostMeter.getY()+scrollSpeed));
screenCeiling += (float) scrollSpeed;
screenFloor += (float) scrollSpeed;
}
else {
Timer.schedule(new Task() { //freeze the screen for 5 seconds
@Override
public void run() {
gameState = STATE.playing;
}
}, 5);
}
Из того, что я понимаю, он ждет 5 секунд, прежде чем возобновить игру до состояния «воспроизведения». Но, как я уже сказал, это работает только при активации между большими интервалами, и я не знаю, почему. Есть ли лучший способ, которым я могу это сделать?
Что касается задержки ввода, это может быть вопрос лучше заданный отдельно, но я использую тот же метод, но он не позволяет мне рисовать спрайты поверх моей таблицы, так что если кто-нибудь знает, как это сделать, в вашем ответе
Как создать таймер 300 раз, если ему разрешено только когда игра находится в замороженном состоянии? Потому что у меня он настроен, если (не заморожен) прокрутка, иначе (новый таймер). и он становится только замороженным, если игрок берет предмет и нажимает пробел. Или вы говорите, как только он заморожен, он создает 300 таймеров, я думаю, что я получаю его, тогда – Darren
'render' вызывается снова и снова. Когда вы впервые вводите 'STATE.frozen', он создаст таймер, когда он достигнет этой точки в коде. В один кадр позже вы все еще находитесь в 'STATE.frozen', когда он добирается до этой точки в коде, поэтому создается еще один таймер. Это будет продолжаться в каждом кадре, пока не погаснет первый таймер и не изменит состояние на 'play'. Теперь на каждом кадре другой таймер достигнет своего предела и загорается до тех пор, пока не будет выполнен последний из 300 таймеров. Только тогда вы сможете изменить состояние и зафиксировать его. – Tenfour04