如何在Corona SDK中加載和保存遊戲數據

如何使用SQLite存儲遊戲數據和設置

幾乎每個應用程序和遊戲都有一個共同點就是需要存儲和檢索數據。 即使是最簡單的遊戲也可以利用SQLite來保存應用程序版本號,該版本號可以用來確保升級時的兼容性,或者簡單的設置,例如打開或關閉遊戲聲音。

如果您從未使用過數據庫或使用Corona SDK中的數據庫功能,請不要擔心。 這實際上是一個相對簡單的過程,這要歸功於LUA和Corona SDK中使用的SQLite數據庫引擎的強大功能。 本教程將介紹創建設置表以及存儲和檢索信息的過程。 如何開發iPad應用程序。

另外請記住,這種技術可以超越存儲基於用戶的設置。 例如,如果您有可以使用不同遊戲模式(如“故事”模式和“街機”模式)的遊戲,該怎麼辦。 該設置表可用於存儲當前模式。 或者即使用戶退出遊戲並重新啟動它,也希望保持其他任何數據。

第一步:初始化數據庫並創建設置表

我們需要做的第一件事是聲明SQLite庫並告訴我們的應用程序在哪裡查找數據庫文件。 放置此代碼的最佳位置與main.lua文件的頂部以及其他require語句一起。 如果沒有找到數據庫文件,將會創建數據庫文件,我們將它存儲在Documents文件夾中,以便我們可以讀取並寫入它。

需要“sqlite3”
local data_path = system.pathForFile(“data.db”,system.DocumentsDirectory);
分貝= sqlite3.open(data_path);

注意“db”變量未被本地化。 我們這樣做是為了確保我們可以在整個項目中訪問數據庫。 您還可以為所有數據庫函數創建特定的.lua文件,並將數據庫本地化為該文件。

接下來,我們需要創建數據庫表來存儲我們的設置:

local sql =“CREATE TABLE IF NOT EXISTS settings(name,value);”
分貝:EXEC(SQL);

這條語句創建我們的設置表。 每當應用程序加載時運行它都可以,因為如果表已經存在,這個語句將不會執行任何操作。 您可以將此聲明放在我們聲明數據庫的位置或設置您的應用程序運行的函數中。 主要的要求是(1)每次啟動應用程序時執行這些語句,(2)在任何調用加載或保存設置之前執行它們。

第二步:將設置保存到數據庫

函數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)
結束

函數setSettingString(name,value)
setSetting(姓名,“'”..值..“'”);
結束

setSetting函數刪除保存到表中的所有先前設置並插入我們的新值。 它可以同時處理整數和字符串,但是保存一個字符串需要單引號括起來,所以我們使用setSettingString函數為我們做了額外的工作。

第三步:從數據庫加載設置

函數getSetting(name)

local sql =“SELECT * FROM settings WHERE name ='”.. name ..“'”;
本地值= -1;

對於db中的行:nrows(sql)做
值= row.value;
結束

返回值;
結束

函數getSettingString(name)
local sql =“SELECT * FROM settings WHERE name ='”.. name ..“'”;
本地值='';

對於db中的行:nrows(sql)做
值= row.value;
結束

返回值;
結束

如上所述,我們已經將函數分成兩個版本:一個用於整數,一個用於字符串。 我們這樣做的主要原因是,如果數據庫中沒有設置,我們可以用特定的值初始化它們。 getSetting函數將返回-1,這會讓我們知道該設置尚未保存。 getSettingString將返回一個空白字符串。

getSettingString函數是完全可選的。 它和普通的getSetting函數之間的唯一區別是,如果在數據庫中找不到任何東西,則返回該函數。

第四步:使用我們的設置表

現在我們已經完成了艱苦的工作,我們可以輕鬆地將設置加載並保存到本地化數據庫。 例如,我們可以用以下語句將聲音靜音:

setSetting(“聲音”,假);

我們可以利用全局功能中的設置播放聲音:

功能playSound(soundID)
如果(getSetting('sound'))那麼
audio.play(soundID)
結束
結束

要重新打開聲音,我們只需將聲音設置為true:

setSetting('聲音',TRUE);

關於這些功能的好處是可以將字符串或整數保存到設置表並輕鬆檢索它們。 這可以讓你做任何事情,從保存球員的名字,保存他們的高分。

Corona SDK:如何對圖形進行分層,移動圖形並將圖形置於前端