Jedną z rzeczy, z którą prawie każda aplikacja i gra ma wspólną cechę, jest potrzeba przechowywania i pobierania danych. Nawet najprostsza gra może wykorzystać SQLite do zapisania numeru wersji aplikacji, który może być użyty w celu zapewnienia kompatybilności podczas przeprowadzania aktualizacji lub prostych ustawień, takich jak włączanie i wyłączanie dźwięku gry.
Jeśli nigdy nie robiłeś dużo pracy z bazami danych lub korzystałeś z funkcji bazy danych w Corona SDK, nie martw się. Jest to stosunkowo prosty proces dzięki mocy LUA i silnika bazy danych SQLite wykorzystywanego w Corona SDK. W tym samouczku omówiono proces tworzenia tabeli ustawień oraz przechowywania i pobierania z niej informacji.
Należy pamiętać, że ta technika może wykroczyć poza przechowywanie ustawień opartych na użytkowniku. Na przykład, jeśli masz grę, w którą można grać za pomocą różnych trybów gry, takich jak tryb "fabuły" i "zręczności". Ta tabela ustawień może służyć do przechowywania bieżącego trybu. Każda inna część danych, która ma pozostać trwała, nawet jeśli użytkownik opuści grę i ponownie ją uruchomi.
Inicjowanie bazy danych i tworzenie tabeli ustawień.
Pierwszą rzeczą, którą musimy zrobić, to zadeklarować bibliotekę SQLite i powiedzieć naszej aplikacji, gdzie można znaleźć plik bazy danych. Najlepsze miejsce do umieszczenia tego kodu znajduje się u góry pliku main.lua wraz z innymi instrukcjami wymagającymi. Plik bazy danych zostanie utworzony, jeśli nie zostanie znaleziony, a my przechowamy go w folderze Dokumenty, abyśmy mogli z niego odczytać i do niego napisać.
wymagają "sqlite3" local data_path = system.pathForFile ("data.db", system.DocumentsDirectory); db = sqlite3.open (data_path);
Zwróć uwagę, że zmienna "db" nie jest zlokalizowana. Zrobiliśmy to, aby upewnić się, że możemy uzyskać dostęp do bazy danych w całym naszym projekcie. Można także utworzyć określony plik .lua dla wszystkich funkcji bazy danych i zachować zlokalizowaną bazę danych w tym pliku.
Następnie musimy utworzyć tabelę bazy danych, która będzie przechowywać nasze ustawienia:
local sql = "STWÓRZ TABELĘ, JEŚLI NIE ZNAJDUJE ustawień (nazwa, wartość);" db: exec (sql);
Ta instrukcja tworzy naszą tabelę ustawień. Uruchomienie jej za każdym razem, gdy aplikacja się ładuje, jest w porządku, ponieważ jeśli tabela już istnieje, to ta instrukcja nic nie da. Możesz umieścić to stwierdzenie bezpośrednio w miejscu, w którym zadeklarowaliśmy bazę danych lub w funkcji, która uruchamia Twoją aplikację. Głównym wymaganiem jest (1) wykonanie tych instrukcji za każdym razem, gdy aplikacja jest uruchomiona i (2) wykonanie jej przed wywołaniem załadowania lub zapisania ustawień.
Zapisywanie ustawień w bazie danych.
function setSetting (name, value) sql = "USUŃ Z ustawień WHERE nazwa =" "… nazwa .." ""; db: exec (sql) sql = "INSERT INTO settings (name, value) VALUES (" "..name .." ', ".. value .."); "; db: exec (sql) end
function setSettingString (name, value) setSetting (name, "'" .. value .. "" ");
Funkcja ustawień usuwa wszelkie poprzednie ustawienia zapisane w tabeli i wstawia naszą nową wartość. Będzie działać zarówno z liczbami całkowitymi, jak i łańcuchami, ale zapisywanie ciągu wymaga pojedynczych cudzysłowów wokół wartości, więc użyliśmy funkcji setSettingString, aby wykonać dla nas dodatkową pracę.
Ładowanie ustawień z bazy danych.
funkcja getSetting (nazwa)
local sql = "WYBIERZ * Z ustawień WHERE nazwa =" "… nazwa .." ""; wartość lokalna = -1;
dla wiersza w db: nrows (sql) do value = row.value; koniec
zwracana wartość; koniec
function getSettingString (name) local sql = "WYBIERZ * Z ustawień WHERE nazwa = '" … nazwa .. "" "; wartość lokalna = '';
dla wiersza w db: nrows (sql) do value = row.value; koniec
zwracana wartość; koniec
Jak wyżej, podzieliliśmy funkcje na dwie wersje: jedną dla liczb całkowitych i jedną dla łańcuchów. Głównym powodem, dla którego to zrobiliśmy, jest możliwość zainicjowania ich za pomocą określonych wartości, jeśli w bazie danych nie ma żadnych ustawień. Funkcja getSetting zwróci wartość -1, co pozwoli nam stwierdzić, że ustawienie nie zostało zapisane. Metoda getSettingString zwróci pusty ciąg.
Funkcja getSettingString jest całkowicie opcjonalna. Jedyną różnicą między nim a normalną funkcją getSetting jest to, co jest zwracane, jeśli nic nie znajduje się w bazie danych.
Korzystanie z naszej tabeli ustawień.
Teraz, gdy wykonaliśmy ciężką pracę, możemy łatwo załadować i zapisać ustawienia w zlokalizowanej bazie danych. Na przykład możemy wyciszyć dźwięk za pomocą następującej instrukcji:
setSetting ("dźwięk", fałsz);
I możemy wykorzystać to ustawienie w globalnej funkcji odtwarzania dźwięków:
funkcja playSound (soundID), jeśli (getSetting ('sound')), a następnie sound.play (soundID), koniec
Aby ponownie włączyć dźwięk, po prostu ustawiamy dźwięk na true:
setSetting ("dźwięk", prawda);
Przyjemną częścią tych funkcji jest możliwość zapisania ciągów lub liczb całkowitych do tabeli ustawień i ich łatwe pobieranie. Dzięki temu możesz zrobić wszystko, od zapisania nazwy gracza po zapisanie swojego wysokiego wyniku.




