如何在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:如何对图形进行分层,移动图形并将图形置于前端