1

在android设备上安装并运行我的应用程序后,当我点击highscore它应该发布“highscore:0”如果它是第一次运行我的问题的应用程序是这个代码

local path = system.pathForFile( "myfile.txt", system.DocumentsDirectory )

似乎android设备中没有system.DocumentsDirectory我需要在编写之前创建文本文件拳头问题是我的路径我需要它来创建myfile.text那么什么可以替代system.DocumentsDirectory?我不能使用 system.ResourceDirectory 导致它的唯一可读不可写

这是我的 highscore.lua,如果用户在安装后玩游戏之前检查高分 1st

   local path = system.pathForFile( "myfile.txt", system.DocumentsDirectory )

   local file = io.open( path, "r" )

   local savedData = file:read( "*n" )

   if (savedData == nil) then
        file=io.open(path,"w")
        local newVal="0"
        file:write(newVal)
        file:flush()
        local scoreText = display.newText("score: " .. newVal, 0, 0, "BorisBlackBloxx", 50)
        scoreText:setReferencePoint(display.CenterLeftReferencePoint)
        scoreText.x = 0
        scoreText.y = 30
   else
        local scoreText = display.newText("score: " .. savedData, 0, 0, "BorisBlackBloxx", 50)
        scoreText:setReferencePoint(display.CenterLeftReferencePoint)
        scoreText.x = 0
        scoreText.y = 30
   end

如果用户第一次玩游戏,这对于我的 game.lua 使用它

            local path = system.pathForFile( "myfile.txt", system.DocumentsDirectory )
            local reader = io.open( path, "r" )                             
            local contents = reader:read("*n")
            local file = io.open( path, "w" )

                    if (contents == nil) then
                        local walaVal="0"
                        file:write(walaVal)
                        file:flush()
                    else
                        file:write(contents)
                        file:flush()
                    end
4

2 回答 2

0

您可以使用这些功能非常轻松地保存和加载文件。我总是和他们一起工作,完全没有遇到任何问题。

require( "json" )
    function saveTable(t, filename)
        local path = system.pathForFile( filename, system.DocumentsDirectory)
        local file = io.open(path, "w")
        if file then
            local contents = json.encode(t)
            file:write( contents )
            io.close( file )
            return true
        else
            return false
        end
    end

    function loadTable(filename)
        local path = system.pathForFile( filename, system.DocumentsDirectory)
        local myTable = {}
        local file = io.open( path, "r" )
        local contents = ""
        if file then
            -- read all contents of file into a string
            local contents = file:read( "*a" )
            myTable = json.decode(contents);
            io.close( file )
            return myTable
        end
        return nil
    end


    -- The part related to your code :
    local scores = loadTable( "scores.json" )
    if scores == nil then
        -- First time in the game
        scores = {}
        scores.highScore = 0
        saveTable( scores, "scores.json" )
    end
于 2013-07-24T14:15:22.080 回答
0

你能打印出返回的路径吗?我DocumentsDirectory用来创建新文件。

请注意,如果不是所有多平台框架,还有一个常见的问题是它ResourceDirectory实际上是 Android 上的 zip。因此访问文件更加复杂,如果您需要修改文件,就会出现问题,因为如果不先解压缩就无法修改 zip 中的文件。这实际上记录在Gotcha部分的 Corona 中。http://docs.coronalabs.com/api/library/system/pathForFile.html

编辑 请参阅 API 的功能 Open:http ://docs.coronalabs.com/api/library/io/open.html 我确信错误是因为你的flag。使用:file = io.open(path, "w+")

Corona 的各种打开模式:

  • “r”:读取模式(默认);文件指针位于文件的开头。

  • “w”:只写模式;如果文件存在,则覆盖文件。如果文件不存在,则创建一个新文件进行写入。

  • “a”:追加模式(只写);如果文件存在,则文件指针位于文件末尾。也就是说,文件处于附加模式。如果文件不存在,它会创建一个新文件进行写入。

  • “r+”:更新模式(读/写),所有以前的数据都被保留;文件指针将位于文件的开头。如果文件存在,则只有在您明确写入时才会被覆盖。

  • “w+”:更新模式(读/写),所有以前的数据都被擦除;如果文件存在,则覆盖现有文件。如果文件不存在,则创建一个新文件进行读写。

  • “a+”:追加更新模式(读/写);保留以前的数据,只允许在文件末尾写入。如果文件存在,则文件指针位于文件末尾。该文件以附加模式打开。如果该文件不存在,则创建一个新文件进行读写。

模式字符串的末尾也可以有一个“b”,在某些系统中需要它以二进制模式打开文件。这个字符串正是标准 C 函数 fopen 中使用的字符串。

于 2013-07-24T12:31:06.520 回答