Как загрузить и сохранить игровые данные в Corona SDK (LUA / SQLite)

Единственное, что объединяет почти каждое приложение и игру, — это необходимость хранить и извлекать данные. Даже самая простая игра может использовать SQLite для сохранения номера версии приложения, который можно использовать для обеспечения совместимости при выполнении обновлений или простых настроек, таких как включение или выключение звука в игре.

Если вы никогда не работали с базами данных и не использовали функции баз данных в Corona SDK, не беспокойтесь. Это относительно простой процесс благодаря мощным LUA и ядру базы данных SQLite, используемому в Corona SDK. В этом руководстве описан процесс создания таблицы настроек, а также хранения и извлечения информации из нее.

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

Инициализация базы данных и создание таблицы настроек

Первое, что нам нужно сделать, это объявить библиотеку SQLite и сообщить нашему приложению, где найти файл базы данных. Лучшее место для размещения этого кода — в верхней части файла main.lua вместе с другими инструкциями require. Файл базы данных будет создан, если он не найден, и мы сохраним его в папке «Документы», чтобы мы могли читать и записывать в него.

требовать "sqlite3" локальный data_path = system.pathForFile ("data.db", system.DocumentsDirectory); db = sqlite3.open (data_path);

Обратите внимание, что переменная «db» не локализована. Мы сделали это, чтобы обеспечить доступ к базе данных на протяжении всего нашего проекта. Вы также можете создать специальный файл .lua для всех функций базы данных и сохранить базу данных локализованной для этого файла.

Далее нам нужно создать таблицу базы данных, в которой будут храниться наши настройки:

local sql = "CREATE TABLE ЕСЛИ НЕ СУЩЕСТВУЕТ настройки (имя, значение);" db: exec (sql);

Это утверждение создает нашу таблицу настроек. Можно запускать его каждый раз, когда приложение загружается, потому что, если таблица уже существует, этот оператор ничего не сделает. Вы можете поместить это утверждение прямо под тем местом, где мы объявили базу данных, или в функции, которая настраивает ваше приложение для запуска. Основное требование — (1) выполнять эти операторы при каждом запуске приложения и (2) выполнять его перед любыми вызовами для загрузки или сохранения настроек.

Сохранение настроек в базе данных

function setSetting (name, value) sql = "УДАЛИТЬ ИЗ НАСТРОЕК ГДЕ name = '" .. name .. "'"; db: exec (sql) sql = "INSERT INTO settings (имя, значение) VALUES ('" ..name .. "'," .. value .. ");"; db: exec (sql) end
функция setSettingString (имя, значение) setSetting (имя, "'" .. value .. "'"); конец

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

Загрузка настроек из базы данных

функция getSetting (имя)
  local sql = "SELECT * FROM settings WHERE name = '" .. name .. "'"; местное значение = -1;
  для строки в db: nrows (sql) do value = row.value; конец  
  возвращаемое значение; конец
function getSettingString (name) local sql = "SELECT * FROM settings WHERE name = '" .. name .. "'"; местное значение = '';
  для строки в db: nrows (sql) do value = row.value; конец  
  возвращаемое значение; конец

Как и выше, мы разбили функции на две версии: одну для целых чисел и одну для строк. Основная причина, по которой мы это сделали, заключается в том, что мы можем инициализировать их конкретными значениями, если в базе данных нет настроек. Функция getSetting вернет -1, что даст нам знать, что настройки не были сохранены. GetSettingString вернет пустую строку.

Функция getSettingString не является обязательной. Единственная разница между ней и обычной функцией getSetting заключается в том, что возвращается, если в базе данных ничего не найдено.

Используя нашу таблицу настроек

Теперь, когда мы выполнили тяжелую работу, мы можем легко загрузить и сохранить настройки в локализованной базе данных. Например, мы могли бы отключить звук следующим выражением:

setSetting ( 'звук', ложь);

И мы могли бы использовать настройку в глобальной функции для воспроизведения звуков:

функция playSound (soundID) if (getSetting ('sound')), затем audio.play (soundID) endend

Чтобы снова включить звук, мы просто устанавливаем настройку звука на true:

setSetting ( 'звук', правда);

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

Ссылка на основную публикацию