Одна вещь, которая имеет почти каждое приложение и игра, - это необходимость хранения и извлечения данных. Даже самая простая игра может использовать SQLite для сохранения номера версии приложения, который может использоваться для обеспечения совместимости при выполнении обновлений или простых настроек, таких как включение или выключение звука игры.
Если вы никогда не делали много работы с базами данных или не использовали функции базы данных в SDK Corona, не волнуйтесь. На самом деле это довольно простой процесс благодаря мощью LUA и движка базы данных SQLite, используемого в SDK Corona. В этом учебном пособии будет рассмотрен процесс создания таблицы настроек и сохранения и получения информации из нее.
Имейте в виду, что этот метод может идти дальше хранения пользовательских настроек. Например, что делать, если у вас есть игра, в которой можно играть в разных режимах игры, таких как «сюжетный» режим и «аркадный» режим. Эта таблица настроек может использоваться для хранения текущего режима. Любой другой фрагмент данных, который вы хотите сохранить настойчивым, даже если пользователь выходит из игры и перезагружает его.
Инициализация базы данных и создание таблицы настроек.
Первое, что нам нужно сделать, это объявить библиотеку SQLite и сообщить нашему приложению, где найти файл базы данных. Лучшее место для размещения этого кода находится прямо в верхней части файла main.lua вместе с другими требованиями. Файл базы данных будет создан, если ни один не найден, и мы сохраним его в папке «Документы», чтобы мы могли прочитать его и записать на него.
требуется «sqlite3» local data_path = system.pathForFile («data.db», system.DocumentsDirectory); db = sqlite3.open (data_path);
Обратите внимание, что переменная «db» не локализована. Мы сделали это, чтобы убедиться, что мы можем получить доступ к базе данных в нашем проекте. Вы также можете создать конкретный файл .lua для всех функций базы данных и сохранить локализацию базы данных в этом файле.
Затем нам нужно создать таблицу базы данных, в которой будут храниться наши настройки:
local sql = "CREATE TABLE if NOT EXISTS settings (имя, значение);" db: exec (sql);
Это утверждение создает нашу таблицу настроек. Это нормально запускать его каждый раз, когда приложение загружается, потому что если таблица уже существует, это утверждение ничего не сделает. Вы можете поставить это утверждение прямо там, где мы объявили базу данных или в функции, которая настраивает ваше приложение для запуска. Основным требованием является (1) выполнять эти инструкции каждый раз при запуске приложения и (2) выполнять его перед любыми вызовами для загрузки или сохранения настроек.
Сохранение настроек в базе данных.
function setSetting (name, value) sql = "DELETE FROM settings WHERE name = '" .. name .. "'"; db: exec (sql) sql = "INSERT INTO settings (name, value) VALUES ('" ..name .. "'," .. value .. ");"; db: exec (sql) end
function setSettingString (имя, значение) setSetting (имя, "'" .. значение .. "'"); end
Функция настройки удаляет все предыдущие настройки, сохраненные в таблице, и вставляет наше новое значение. Он будет работать как с целыми числами, так и с строками, но для сохранения строки требуются одинарные кавычки вокруг значения, поэтому мы использовали функцию 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 ( 'звук', ложь);
И мы могли бы использовать настройку в глобальной функции для воспроизведения звуков:
function soundSound (soundID) if (getSetting ('sound')), тогда audio.play (soundID) endend
Чтобы снова включить звук, мы просто устанавливаем настройку звука в true:
setSetting ( 'звук', правда);
Хорошая часть этих функций заключается в том, что вы можете сохранять строки или целые числа в таблице параметров и легко извлекать их. Это позволяет вам что-то делать, чтобы сохранить имя игрока, чтобы сохранить свой высокий балл.