Перейти к основному содержанию

Пауза в игре


Автоматически переведённая страница

К сожалению, на полный ручной перевод у нас не хватает ресурсов.
Если вы увидели ошибку — отправьте пул-риквест с исправлениями (ссылка для редактирования в конце страницы).

Пауза в игре

Если вы хотите сделать паузу в игре и создать меню паузы, необходимо заблокировать все процессы движения и игрового процесса, оставив интерфейс без изменений. Если вы весь время использовали u.time, вам все готово, и вам нужно добавить всего несколько строк! Однако есть несколько нюансов:

  • Убедитесь, что все ваши таймеры используют встроенные события или основаны на u.time. Код таймера может быть прост — напр. this.timer -= u.time, но не this.timer--.
  • Элементы вашего интерфейса должны использовать u.timeUi, чтобы они оставались отзывчивыми во время паузы в игре.
  • Будьте внимательны к tween внутри вашего кода игрового процесса, так как tween по умолчанию использует u.time.

u.time — это значение, доступное во всем проекте, которое показывает, сколько времени прошло в последнем кадре. Его использование обеспечивает плавную работу игры на любых устройствах, но его также можно масштабировать, что приводит к замедлению или ускорению игры, например, для создания эпических сцен замедления. Мы также можем остановить игру:

pixiApp.ticker.speed = 0;

И это весь код, который вам нужно добавить, чтобы сделать паузу в игре. Добавьте его в любое событие на основе действий, например, добавьте этот код в OnStep комнаты:

if (actions.Pause.pressed) {
    pixiApp.ticker.speed = 0;
}

Не забудьте создать реальное действие в настройках вашего проекта! Свяжите его так, чтобы пользователи на разных платформах могли делать паузы в игре.

Когда этот код выполняется, u.time становится 0 повсюду, что по сути останавливает игровой процесс, включая стандартную систему движения, которая использует this.speed и другие переменные.

Переброска назад

Теперь вам нужно создать способ возобновления игры, например, изменив код выше таким образом, чтобы та же кнопка останавливала игру. Мы также добавим кусочки кода, чтобы сделать его более практичным.

if (actions.Pause.pressed) {
    if (!rooms.current.paused) {
        // Это может использоваться элементами интерфейса и игрового процесса для остановки любых действий игры, которые не связаны с u.time
        rooms.current.paused = true;

        pixiApp.ticker.speed = 0;

        // Этот шаблон может просто быть текстурой, которая выстраивается в соответствии с видом и сообщает нажать на кнопку устройства, специфичную для своего устройства (например, "Нажмите Escape для паузы" для клавиатурных устройств).
        this.unpauseHint = templates.copy('PauseHint', rooms.current.x + camera.width / 2, rooms.current.y + camera.height / 2);
        // Координаты устанавливаются так, чтобы копия была точно в середине экрана игрока.
        // См. "Работа с камерой" в других советах и хитростях.
    } else {
        rooms.current.paused = false;

        pixiApp.ticker.speed = 1; // `1` — это нормальная скорость

        this.unpauseHint.kill = true; // Удалить копию
    }
}

Этот код также можно разделить на две части и переместить в кнопки интерфейса. Анимированные элементы интерфейса могут работать на котомоде tween или быть анимированы вручную через время на каждом кадре.