我在corona sdk中的数据库似乎有问题。我希望每次玩家玩游戏时都存储游戏次数。我的项目没有gamecene,只能通过menu.lua播放。我已经建立了一个高分数据库(它与另一个数据库分开但完全相同)并且它工作正常并且更新/加载数据很好。然而,我的播放计数数据库不起作用。
首先,当游戏移除后游戏再次返回菜单时,游戏计数会增加1。但是在那之后尝试不会增加价值,就像重置一样。
Globals.lua
M.plays = 0
--------------------------
local function setupDatabase2()
local dbPath = system.pathForFile("appInfo.db3", system.DocumentsDirectory)
local db = sqlite3.open( dbPath )
local tablesetup1 = [[
CREATE TABLE played (id INTEGER PRIMARY KEY, plays);
INSERT INTO played VALUES (NULL, '0');
]]
db:exec( tablesetup1 ) --Create it now.
db:close() --Then close the database
end
setupDatabase2()
M.loadAppInfo = function()
local dbPath = system.pathForFile("appInfo.db3", system.DocumentsDirectory)
local db = sqlite3.open(dbPath)
for row in db:nrows("SELECT * FROM played WHERE id = 1") do
M.plays = tonumber(row.plays)
end
db:close()
end
M.saveAppInfo = function()
local dbPath = system.pathForFile("appInfo.db3", system.DocumentsDirectory)
local db = sqlite3.open(dbPath)
local update = "UPDATE played SET plays='" .. M.plays .."' WHERE id=1"
db:exec(update)
db:close()
end
return M
menu.lua
local utils = require("helpers.globals")
local play = 0
----------------------------------------
function scene:createScene( event )
local group = self.view
utils.loadHighscoreInfo() -- Separate db which is working fine
utils.loadAppInfo()
function beginGame( event )
timerSrc = timer.performWithDelay(400, createBlock, -1)
Runtime:addEventListener("enterFrame", gameLoop)
play = play +1
utils.plays = play
utils.saveAppInfo()
end
答案 0 :(得分:1)
你的SQL语句正在做所有这些。您当前的sql每次调用时都会创建一个表。试试这个:
local tablesetup1 = [[
CREATE TABLE IF NOT EXISTS played (id INTEGER PRIMARY KEY, plays);
INSERT INTO played VALUES (NULL, '0');]]
我想这句话非常自我解释:)