ハイスコアの記録を保持するためにデータベースを使用しています。絵コンテのシーンチェンジで、ハイスコアを表示するファイルを作っています。最初にデータベースを作成し、次にテーブルを作成してから、レコードを取得します。現在作成されているスコアがデータベース内の既存のスコアよりも大きいかどうかを確認します。最初の既存のレコードを更新します。
シミュレーターでは問題なく動作しますが、デバイスでは前のシーンにとどまり、シーンをハイスコア ファイルに変更することはありません。
データベースが実装される前にシーンが変わりました。
local myData = require("myData")
-----------------------------------------------------------------------------
-- DATABASE
-- SQLite
-----------------------------------------------------------------------------
--Include sqlite
require "sqlite3"
local path = system.pathForFile("myDataBaseASDF.db", system.DocumentsDirectory)
db = sqlite3.open( path )
--Handle the applicationExit event to close the db
local function onSystemEvent( event )
if( event.type == "applicationExit" ) then
db:close()
end
end
local tablesetup = [[CREATE TABLE IF NOT EXISTS highScoreClassic (id INTEGER PRIMARY KEY, Time, Taps);]]
print("DB Created")
db:exec( tablesetup )
local dbRows = 0
local dbTaps = 0
local dbTime = "00:00:00"
--print all the table contents
for row in db:nrows("SELECT * FROM highScoreClassic WHERE id=1;") do
dbRows = dbRows + 1
dbTaps = row.Taps
dbTime = row.Time
print("Row Taken")
end
function isHighscore()
if myData.currentScore > dbTime then
return true
elseif myData.currentScore == dbTime and myData.taps > dbTaps then
return true
elseif myData.currentScore == dbTime and myData.taps < dbTaps then
return false
else return false end
end
function saveToDataBase()
print("updating")
local q = [[UPDATE highScoreClassic SET Time=']]..myData.currentScore..[[', Taps=]]..myData.taps..[[ WHERE id=1;]]
db:exec( q )
end
function saveToDataBaseFirstTime()
print("inserting")
local tablefill =[[INSERT INTO highScoreClassic VALUES (NULL, ']]..myData.currentScore..[[',']]..myData.taps..[['); ]]
db:exec( tablefill )
end
if ( dbRows > 0 ) then
if ( isHighscore() ) then
print(dbTime, dbTaps)
myData.highScore = true
saveToDataBase()
else
myData.highScore = false
print("No HighScore")
end
else
saveToDataBaseFirstTime()
end
--setup the system listener to catch applicationExit
Runtime:addEventListener( "system", onSystemEvent )