【发布时间】:2014-08-15 04:35:57
【问题描述】:
所以我正在制作一款需要保存很多价值的游戏。我使用了 Rob Miracle 的一个模块,它可以很容易地保存和加载表来使用两个表来执行此操作。一个名为“gamestuff”,另一个名为“leveltries”。
在一个场景中,我声明了这些表的值(仅当它们之前没有保存时)
gamestuff.level = 1
gamestuff.sound = true
gamestuff.name = "user"
gamestuff.highscore = 0
gamestuff.lastscore = 0
gamestuff.volume = 0.5
gamestuff.lastlevel = 1
gamestuff.won = false
gamestuff.bouncesleft = 0
local leveltries = {
{tries =0, wins = 0, fails = 0, retries = 0, bouncesleft = 0, bestbounces = 0, score = 0},
{tries =0, wins = 0, fails = 0, retries = 0, bouncesleft = 0, bestbounces = 0, score = 0},
{tries =0, wins = 0, fails = 0, retries = 0, bouncesleft = 0, bestbounces = 0, score = 0},
{tries =0, wins = 0, fails = 0, retries = 0, bouncesleft = 0, bestbounces = 0, score = 0},
{tries =0, wins = 0, fails = 0, retries = 0, bouncesleft = 0, bestbounces = 0, score = 0},
{tries =0, wins = 0, fails = 0, retries = 0, bouncesleft = 0, bestbounces = 0, score = 0},
{tries =0, wins = 0, fails = 0, retries = 0, bouncesleft = 0, bestbounces = 0, score = 0},
{tries =0, wins = 0, fails = 0, retries = 0, bouncesleft = 0, bestbounces = 0, score = 0},
{tries =0, wins = 0, fails = 0, retries = 0, bouncesleft = 0, bestbounces = 0, score = 0},
{tries =0, wins = 0, fails = 0, retries = 0, bouncesleft = 0, bestbounces = 0, score = 0},
}
loadsave.saveTable(leveltries, "leveltries.json")
loadsave.saveTable(gamestuff, "gamestuff.json")
这很好用,除非我尝试在第一关之后进入重新启动关卡场景和胜利场景。
但这让我很困惑,因为我在第一级尝试过
print("Fails: "..leveltries[gamestuff.lastlevel].fails)
它可以工作
但是当我在重启场景中尝试它时,它没有:
local storyboard = require( "storyboard" )
local scene = storyboard.newScene()
local loadsave = require("loadsave")
local gamestuff = {}
local leveltries = {}
local options =
{
effect = "fade",
time = 400
}
local function loader()
gamestuff = loadsave.loadTable("gamestuff.json")
leveltries = loadsave.loadTable("leveltries.json")
print("loaded")
end
local function save()
loadsave.saveTable(gamestuff, "gamestuff.json")
loadsave.saveTable(leveltries, "leveltries.json")
end
function scene:createScene(event)
gamestuff = {}
leveltries = {}
end
function scene:enterScene(event)
loader()
print("Fails"..leveltries[gamestuff.lastlevel].fails) --says the error is here
local a = leveltries[gamestuff.lastlevel].fails + 1
leveltries[gamestuff.lastlevel].fails = a
timer.performWithDelay( 50, function()
save()
storyboard.gotoScene("level"..tostring(gamestuff.lastlevel), options)
end, 1 )
end
function scene:exitScene(event)
local group = self.view
storyboard.removeScene("restarter")
end
function scene:destroyScene(event)
gamestuff = nil
leveltries = nil
options = nil
end
scene:addEventListener( "createScene", scene )
scene:addEventListener( "enterScene", scene )
scene:addEventListener( "exitScene", scene )
scene:addEventListener( "destroyScene", scene )
return scene
谁能告诉我为什么上面的代码不起作用?
会不会是我没有正确删除level1中的“gamestuff”和“leveltries”?
我试着把一些照片放进去。在 1 级场景中:
一切正常:
print(gamestuff.lastlevel)
print(leveltries[gamestuff.lastlevel].fails)
print(leveltries[gamestuff.lastlevel])
但是在重启场景中,只有:
print(gamestuff.lastlevel) --which prints 1 and is right
作品
print(leveltries[gamestuff.lastlevel]),在restarter场景中打印nil
我不知道这怎么可能。我在两个场景中同时以相同的方式加载相同的表格并以相同的方式使用它们。
会不会是我错误地删除了表格?
在场景一中,这些是我的 exitScene 和 removeScene:
function scene:exitScene(event)
Runtime:removeEventListener("touch", shoot)
menub:removeEventListener("touch", gotomenu)
restartb:removeEventListener("touch", restart)
goal:removeEventListener("collision", win)
ball:removeEventListener("collision", hit)
ball:removeEventListener("collision", grow)
Runtime:removeEventListener("enterFrame", twinkle)
Runtime:removeEventListener("enterFrame", redraw)
end
function scene:didExitScene(event)
--storyboard.removeScene("level1")
end
function scene:destroyScene(event)
bg:removeSelf()
ball:removeSelf()
goal:removeSelf()
topwall:removeSelf()
bottomwall:removeSelf()
rightwall:removeSelf()
leftwall:removeSelf()
menub:removeSelf()
bounces = nil
bouncestext:removeSelf()
taps = nil
restartb:removeSelf()
tuttext:removeSelf()
gamestuff = nil
bg = nil
ball = nil
goal = nil
topwall = nil
bottomwall = nil
rightwall = nil
leftwall = nil
menub = nil
bouncestext = nil
restartb = nil
tuttext = nil
options = nil
trailprops = nil
for i = 1, 3 do
wallColor[i] = nil
end
end
scene:addEventListener("createScene", scene)
scene:addEventListener("enterScene", scene)
scene:addEventListener("exitScene", scene)
scene:addEventListener("didExitScene", scene)
scene:addEventListener("destroyScene", scene)
【问题讨论】:
标签: lua coronasdk null lua-table corona-storyboard