在电晕中创建的应用程序在Android设备中获取错误

时间:2013-07-24 12:23:40

标签: android lua corona

在Android设备上安装并运行我的应用程序后,当我点击高分时,如果第一次运行我的问题的应用程序是此代码,则应该发布“highscore:0”

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

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

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

   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

2 个答案:

答案 0 :(得分:0)

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

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

修改 有关Open函数的信息,请参阅API:http://docs.coronalabs.com/api/library/io/open.html 我确信错误是因为你的标志。 使用:     file = io.open(path,“w +”)

Corona的各种开放模式:

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

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

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

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

  • “w +”:更新模式(读/写),删除所有先前的数据;如果文件存在,则覆盖现有文件。如果文件没有 存在,创建一个新的阅读和写作文件。

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

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

答案 1 :(得分: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