我一直在关注电晕网站上的教程,到目前为止一切进展顺利。
但是在教程“显示和保存得分”中,我似乎遇到以下运行时错误。
尝试调用字段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搜索,但找不到任何解决方案。也许我在一个我无法识别的地方犯了一个错误。
甚至尝试在我的智能手机上进行构建,但最终遇到相同的错误。
答案 0 :(得分:1)
来自电晕文档
语法
system.setPreferences(类别,首选项)
类别(必填) 串。指示应在系统上访问哪些首选项集。当前,仅支持“应用程序”类别-这是Corona应用程序开发人员定义的应用程序自定义首选项。
首选项(必填) 表。要写入存储的首选项表。该表应包含键值对,其中键是首选项的唯一名称,其值可以是布尔值,数字或字符串。
如果您的M.score
为零,那么您可能会收到错误消息
试试这个
local saved = system.setPreferences( "app", { currentScore=M.score or 0 } )