0

ハイスコ​​アの記録を保持するためにデータベースを使用しています。絵コンテのシーンチェンジで、ハイスコアを表示するファイルを作っています。最初にデータベースを作成し、次にテーブルを作成してから、レコードを取得します。現在作成されているスコアがデータベース内の既存のスコアよりも大きいかどうかを確認します。最初の既存のレコードを更新します。

シミュレーターでは問題なく動作しますが、デバイスでは前のシーンにとどまり、シーンをハイスコア ファイルに変更することはありません。

データベースが実装される前にシーンが変わりました。

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 )
4

2 に答える 2

0

シミュレータ DocumentsDirectory のファイルは、デバイスに含まれません。ファイルを再度作成する必要があります。

于 2015-01-21T20:04:16.393 に答える