更新分数未起作用。

我遇到了关于我的 updateScore 的问题,我的函数的作用是当用户第一次玩游戏时,将会创建一个名为 myFile.txt 的文件来记录分数。现在问题来了,代码是要检查它是否已经存在,如果不存在,就会进入我的 else 中。如果文件已经存在,那么我的内容就应该是分数的值,然后我可以用它来进行比较并获取我的最高分。

问题是我的内容总是返回 nil 值,因此当你玩游戏时获取的分数将会替换本来应该是我的最高分的分数,我不知道我做错了什么。

以下是我的代码

function updateScore()

    local path = system.pathForFile( "myfile.txt", system.DocumentsDirectory )
    local reader = io.open( path, "r" )
    local file = io.open( path, "w" )

    if reader then

        reader:close()
        local reader1 = io.open( path, "r" )
        local contents = reader1:read("*n")

        if (stopscore == false) then
            score = score + 1
            scoreText.text = "score: " .. score
            scoreText:setReferencePoint(display.CenterLeftReferencePoint)
            scoreText.x = 0
            scoreText.y = 30
        end

        if (stopscore == true) then

            if (contents == nil) then
                local file = io.open( path, "w" )
                file:write(score)
                file:flush()
                file:close()
                timer.pause(timer1)
                director:changeScene( "menu", "downFlip" )

            else

                if (contents < score) then
                    file:write(score)
                    file:flush()
                    file:close()
                    timer.pause(timer1)
                    director:changeScene( "menu", "downFlip" )
                else
                    file:write(contents)
                    file:flush()
                    file:close()
                    timer.pause(timer1)
                    director:changeScene( "menu", "downFlip" )
                end

            end
        end

    else

        local file1 = io.open( path, "w" )
        local walaVal=0
        file1:write(walaVal)
        file1:close()

        if (stopscore == false) then
            score = score + 1
            scoreText.text = "score: " .. score
            scoreText:setReferencePoint(display.CenterLeftReferencePoint)
            scoreText.x = 0
            scoreText.y = 30
            print(contents)
        end

        if (stopscore == true) then
            local file = io.open( path, "w" )
            file:write(score)
            file:flush()
            file:close()
            timer.pause(timer1)
            director:changeScene( "menu", "downFlip" )
        end

    end
end
点赞
用户1682268
用户1682268

因为问题出在这段代码 local file = io.open( path, "w" ) 上,所以 contents 会返回 nil。当你调用这段代码时,它会抹掉文件的所有内容。为了解决这个问题,你必须在调用 local file 时删除模式 "w",像这样:local file = io.open(path)。当你需要更新分数时,应该再次放置模式 "w"。为了更好地理解我的意思,我将编写并解释代码。

-- 首先检查文件是否存在
local path = system.pathForFile("myfile.txt", system.DocumentsDirectory)
local file = io.open(path)

-- 如果文件存在,则检查内容并读取分数,否则创建文件并写入分数
if file then
    local reader = io.open(path, "r")
    local contents = reader:read("*n")
    -- 如果内容小于我的分数,则更新分数
    if contents < myScore then
        file = io.open(path, "w")
        file:write(myScore)
        file:flush()
        file:close()
    end
else
    file = io.open(path, "w")
    file:write(myScore)
    file:flush()
    file:close()
end

希望我能很好地为你解释清楚 :)

2013-07-28 14:55:29