Как делать сохранения

5

Stats

3,578 visits, 5,314 views

Tools

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 5 Nov, 2022.

Construct 3 предоставляет простой способ создания сохранений. Это позволяет вашим игрокам сохранить игру, а затем вернуться позже и загрузить ее именно с того места, где они остановились. Это важно для длинных игр, особенно когда уровни или этапы длинные. Хотя можно иметь очень простое сохранение типа «последний достигнутый уровень» с использованием локального хранилища, обычно очень сложно использовать его для сохранения полного состояния каждого последнего объекта. Действия «Сохранить» и «Загрузить» системного объекта удобно позволяют вам сделать именно это, позволяя вам легко добавить полную функцию сохранения игры с минимальными усилиями.

БАЗОВАЯ ПОДДЕРЖКА СОХРАНЕНИЙ

Простой способ добавить сохраненные игры — просто использовать системные действия «Сохранить и загрузить» при нажатии определенной клавиши. Например:

Для мобильных игр вам, очевидно, потребуется использовать сенсорный ввод, но для простоты мы сосредоточимся на десктопной игре.

Сохраненные игры сохраняются браузером в локальной системе. Это означает, что игроки могут выключить свой компьютер или устройство, вернуться на следующий день, и сохраненная игра все еще может быть успешно загружена. Обратите внимание, однако, что сохраненные игры связаны с конкретным браузером. Например, Firefox и Chrome будут хранить сохраненные игры отдельно; если игрок сохраняет игру при использовании Chrome, а затем переключается на Firefox, он не сможет загрузить эту сохраненную игру.

Сохранения не сохраняются в кэше. Кэш браузера — это временное хранилище, которое используется для сохранения таких вещей, как изображения на веб-страницах, без необходимости их повторной загрузки каждый раз, и оно регулярно очищается. Вместо этого сохраненные игры сохраняются в хранилище IndexedDB, которое является более постоянным. Однако пользователь по-прежнему может вручную очистить свое хранилище, что также сотрет IndexedDB.

СЛОТЫ СОХРАНЕНИЯ

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

Обратите внимание, что у большинства браузеров есть ограничение на объем данных, которые веб-страница может сохранить на диск. Это вряд ли будет проблемой для большинства игр, но если у вас есть огромное количество отдельных слотов для сохранения, вы можете достичь предела хранилища. Предложение ограниченного количества слотов для сохранения — хороший способ гарантировать, что вы никогда не достигнете предела. Надлежащее использование поведения «Без сохранения» также может помочь уменьшить размеры сохраненных игр (см. ниже).

ЗАВЕРШАЮЩИЕ ТРИГГЕРЫ

Сохранение может занять некоторое время, а игра тем временем продолжает работать. После завершения сохранения срабатывает системный триггер «Сохранение завершено». Точно так же загрузка может занять некоторое время, и после ее завершения срабатывает «Загрузка завершена». Обратите внимание, что любые изменения, сделанные после действия «Сохранить», но до триггера «Сохранение завершено», могут быть сохранены.

Если вы попытаетесь загрузить из слота, который еще не был сохранен, сработает триггер «Ошибка при загрузке». Если пользователь выбирает слот сохранения для загрузки, вы можете просто начать новую новую игру в этом событии.

ПОВЕДЕНИЕ 'НЕ СОХРАНЯТЬ'

Все, что имеет Поведение Не сохранять, не будет сохранено и не будет затронуто при загрузке. Рекомендуется добавлять поведение «Не сохранять» к любым статическим объектам, таким как декорации и фоны. Его также можно использовать для автоматически обновляемых объектов, таких как HUD и текстовые объекты, которые обновляются каждый тик. Это не будет иметь никакого значения для игры, но сделает сохраненные игры меньше и ускорит их сохранение и загрузку, поскольку ненужная информация будет опущена.

ИЗМЕНЕНИЕ ПРОЕКТА ПОСЛЕ СОХРАНЕНИЯ

Сохранения должны быть устойчивы к изменениям в вашем проекте. Вы должны иметь возможность добавлять, удалять и изменять порядок различных вещей, таких как переменные, поведения и другие объекты, и при этом старые сохранения должны успешно загружаться. Обратите внимание, однако, что все новое, что вы добавляете, не будет иметь данных для сохранения, поэтому это не будет затронуто при загрузке. Также обратите внимание, что если вы удалите что-либо из проекта, он также не сможет загрузиться снова. Вы можете удалить отдельные экземпляры, не затрагивая сохраненные игры, но если вы удалите целые типы объектов, макеты или слои, они никогда не будут загружены обратно из сохраненной игры.

ДОПОЛНИТЕЛЬНЫЕ ТЕМЫ

Все, что было рассмотрено до сих пор, достаточно для большинства игр, чтобы легко добавить функцию сохранения. Однако продвинутых пользователей могут заинтересовать следующие темы, в которых более подробно рассматривается система сохранения игр.

ОТСЛЕЖИВАНИЕ ИСПОЛЬЗОВАНИЯ СЛОТОВ

Системные действия по сохранению/загрузке не говорят вам, в какие слоты были сохранены. Лучший способ отследить это — самостоятельно сохранить некоторые дополнительные метаданные в объекте «Локальное хранилище». Например, всякий раз, когда вы сохраняете в слот, также записывайте ключ локального хранилища, указывающий, что слот был сохранен. Вы можете добавить некоторые другие метаданные, такие как имя игрока или даже небольшой скриншот игры, в качестве URI данных. Затем вы можете узнать, какие слоты используются, из сохраненных вами данных локального хранилища. Вы можете выполнять другие операции, такие как сброс или очистка сохраненных игровых данных, просто настроив эти ключи метаданных, например удалив их, чтобы слот снова выглядел пустым.

ЧТО ЕСТЬ И НЕ СОХРАНЯЕТСЯ

Полное состояние игры, включая переменные экземпляра, глобальные и локальные переменные, свойства поведения, эффекты, частицы, воспроизводимый в данный момент звук и т. д., сохраняется. Однако есть несколько исключений, надеюсь, ни одно из них не является удивительным. Следующие вещи не сохраняются и не будут затронуты при загрузке:

  • Состояние ввода (т. е. положение мыши или удерживал ли игрок клавиши или касания)
  • AJAX Запросы
  • WebSocket Соединения
  • XML Объект
  • Пользовательские медиа-видео или аудиопотоки
  • Состояние входа для любых сервисов, таких как Facebook
  • Состояние локального хранилища
  • Любые покупки в приложении на любой платформе
  • Все, что связано с поведением 'Не сохранять'

НЕПОСРЕДСТВЕННОЕ ИСПОЛЬЗОВАНИЕ ДАННЫХ JSON

В обоих триггерах «Сохранение завершено» и «Загрузка завершена» системное выражение SaveStateJSON возвращает строку всех данных JSON для сохраненной игры. Обратите внимание, что выражение SaveStateJSON вернет пустую строку за пределами этих триггеров; триггеры — это ваша единственная возможность получить прямой доступ к данным.

Если у вас есть собственный сервер, можно создавать общие сохранения, отправляя данные JSON на сервер с объектом AJAX и сохраняя их в базе данных сервера. В качестве альтернативы, некоторые платформы позволяют вам хранить данные вошедшего в систему пользователя, где они доступны везде, где они входят в систему. Это полезно для того, чтобы пользователи могли брать с собой сохраненные игры, куда бы они ни пошли.

Как только вы получите строку JSON обратно, вы сможете загрузить из нее игру с помощью системного действия «Загрузить из JSON».

ВЕРСИЯ

Обычно вы можете изменить свой проект, и старые игры все равно будут нормально загружаться. Однако некоторые продвинутые пользователи могут захотеть точно отслеживать, из какой версии их проекта была сделана сохраненная игра. Вы можете сделать это, используя глобальную переменную. Вызовите переменную Version и инициализируйте ее значением 1. Позже, если вы опубликуете новую версию своей игры, измените начальное значение переменной на новое число, например 2. Теперь при срабатывании триггера «Загрузка завершена» глобальная переменная загружается и устанавливается со значением «Версия» на момент использования действия «Сохранить». Это может быть полезно, если вы добавляете в игру много новых объектов, но хотите убедиться, что они уничтожены или скрыты при загрузке старых сохранений.

  • 0 Comments

Want to leave a comment? Login or Register an account!