Призупинення гри всередині ігрового циклу


12

Всередині ігрового циклу гра призупиняється натисканням кнопки P, що означає, що ігровий цикл більше не працює. Проблема полягає в тому, що після припинення циклу P не можна натискати знову, щоб відновити цикл, оскільки він знаходився всередині самої петлі. Як зробити так, щоб при натисканні кнопки Р знову цикл працював?

Відповіді:


20

Насправді не зупиняйте цикл гри, призупиняючи гру. Натомість вам потрібно додати змінну bool, яка буде змінена на true / false залежно від того, якщо гра призупинена. Якщо гра призупинена, вам потрібно лише зупинити оновлення гри, але ви все одно можете продовжувати відображати поточний кадр, включаючи отримання оновлень із введення даних.

if(gameIsPaused == false)
{
    // run updates
}
checkInput();
render();

Можливо, ви хочете мати іншу checkInputфункцію для призупиненого режиму та режиму безпризупинення, оскільки можуть бути деякі елементи керування, доступні лише в одному або іншому режимі. checkInputФункція режим паузи не може зробити нічого більш , ніж дивитися , якщо Pнатиснута , а потім встановити gameIsPaused = false, але деякі ігри також розміщувати додатково функції на екрані паузи (в 90 - х роках він був популярний , щоб мати екран паузи , як прихований вхід для читов, сучасний ігри люблять поєднувати його з екраном меню).
Філіп

1
Хоча, як правило, я погоджуюся з вашою відповіддю, я думаю, що слід чітко сказати, що іноді цілком справедливо запускати деякі оновлення в призупиненому стані. Наприклад, анімація пунктів меню або, можливо, деяке управління звуком. Велика ідея полягає в тому, що умова паузи дозволяє вам перейти на інший набір checkInput/ render/ updateвикликів.
Ніколас Міллер

Єдине, що слід призупинити в грі, це те, що біт "оновлення світу" слід пропустити. Усі інші функціональні можливості, ймовірно, повинні зберігатися як звичайні.
Mooing Duck

4
Я намагався відповісти максимально просто, тому що це дуже основні речі в програмуванні ігор, і я не хотів плутати запитувача.
Кату

1
@ user3730788: Гілка, яка виконує один раз за цикл гри (тобто менше 100 разів за секунду), не матиме відчутного впливу на продуктивність, навіть якщо вона буде спрогнозована щоразу .
Ільмарі Каронен

1

Зробіть так, щоб натискання кнопки P переключилося на інший цикл, який обробляє ігровий стан "Призупинено" і дозволяє перейти назад до початкового циклу гри, натиснувши P знову.

Ви можете фактично помістити все це в сам цикл гри і ввести змінну стану, якщо ви хочете, і замість того, щоб вимикати цикл, змінна стану перемикається між виконанням відповідного коду, специфічного для держави в циклі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.