电晕中的getPreference和setPreferences有问题

时间:2018-10-17 04:08:49

标签: lua corona

我一直在关注电晕网站上的教程,到目前为止一切进展顺利。

但是在教程“显示和保存得分”中,我似乎遇到以下运行时错误。

  

尝试调用字段setPreferences'(一个nil值)

这是score.lua的代码

local M = {}

M.score = 0

function M.init( options )

    local customOptions = options or {}   -- nice use of "or" operator
    local opt = {}
    opt.fontSize = customOptions.fontSize or 24
    opt.font = customOptions.font or native.systemFont
    opt.x = customOptions.x or display.contentCenterX
    opt.y = customOptions.y or opt.fontSize*0.5   -- such that the score is positioned at the top, half of its font size.
    opt.maxDigits = customOptions.maxDigits or 6
    opt.leadingZeros = customOptions.leadingZeros or false

    local prefix = ""
    if ( opt.leadingZeros ) then
        prefix = "0"
    end
    M.format = "%" .. prefix .. opt.maxDigits .. "d"   -- so that its accesible in other modules.

    -- Create the score display object 
    M.scoreText = display.newText( string.format( M.format, 0 ), opt.x, opt.y, opt.font, opt.fontSize )   -- string.format() works like printf and scanf statements
    M.scoreText:setFillColor(1,0,0)
    return M.scoreText
end

function M.set( value )

    M.score = tonumber(value)
    M.scoreText.text = string.format( M.format, M.score )

end

function M.get()

    return M.score
end

function M.add( amount ) 

    M.score = M.score + tonumber(amount)
    M.scoreText.text = string.format( M.format, M.score )
end

function M.save()
    print (" the score is " .. M.score)
    local saved = system.setPreferences( "app", { currentScore=M.score } )
    if ( saved == false) then
        print ( "ERROR: could not save score" )
    end
end

function M.load()
    local score = system.getPreference( "app", "currentScore", "number" ) 

    if  ( score ) then
        return tonumber(score)
    else
        print( "ERROR: could not load score (score may not exist in storage)" )
    end
end

return M

这是main.lua的代码

local score = require( "score" )

local scoreText = score.init(
{
    fontSize = 20,
    font = "CoolCustomFont.ttf",
    x = display.contentCenterX,
    y = 30,
    maxDigits = 7,
    leadingZeros = true
})

local savedScore = score.load()
score.set( 1000 ) -- Sets the score to value
score.save()

我知道还有其他保持得分的方法,但是我想知道代码中存在的问题。我到处都用Google搜索,但找不到任何解决方案。也许我在一个我无法识别的地方犯了一个错误。

甚至尝试在我的智能手机上进行构建,但最终遇到相同的错误。

1 个答案:

答案 0 :(得分:1)

来自电晕文档

  

语法

     

system.setPreferences(类别,首选项)

类别(必填) 串。指示应在系统上访问哪些首选项集。当前,仅支持“应用程序”类别-这是Corona应用程序开发人员定义的应用程序自定义首选项。

首选项(必填) 表。要写入存储的首选项表。该表应包含键值对,其中键是首选项的唯一名称,其值可以是布尔值数字字符串

如果您的M.score为零,那么您可能会收到错误消息 试试这个

local saved = system.setPreferences( "app", { currentScore=M.score or 0 } )