SDK Corona 我想执行 - > movboton:setSequence(“apretado”)< - 用于更改ImageSheet的序列。如果我在函数外部执行它,但是当我从函数中尝试时,它可以工作。我得到这个错误“99:尝试索引全局'movboton'(一个零值)”。
任何想法为什么? 感谢。
botonnormal = graphics.newImageSheet( "buttonstart.png", { width=340, height=338, numFrames=2 } )
botonapretado = graphics.newImageSheet ( "buttonstart.png", { width=340, height=338, numFrames=2 } )
local movboton
local seqBoton = {
{ name="normal", sheet=botonnormal, start=1, count=1, time=1000},
{ name="apretado", sheet=botonapretado, start=2, count=2, time=1100}
}
movboton = display.newSprite(botonnormal, seqBoton)
movboton.x = display.contentWidth / 2
movboton.y = display.contentHeight / 2
movboton.xScale = .5
movboton.yScale = .5
如果我把代码放在这里,它可以工作,但是从触摸屏时调用的函数来看,它给出了我的错误。
movboton:setSequence(“apretado”)
movboton:播放()
local function apretato(event)
--print("apretado")
if event.phase == "began" then
print("start")
--storyboard.gotoScene("game", "fade", 400)
movboton:setSequence( "apretado" )
movboton:play()
end
end
function scene:enterScene(event)
btninvisible:addEventListener( "touch", apretato )
end
以下是所有代码:
-- requerimientos
local storyboard = require("storyboard")
local scene = storyboard.newScene()
--Background
function scene:createScene(event)
local screenGroup = self.view
local background = display.newImage("start.png")
screenGroup:insert(background)
city2 = display.newImage("city2.png")
city2:setReferencePoint(display.BottomLeftReferencePoint)
city2.x = 0
city2.y = 320
screenGroup:insert(city2)
--PERSONAJE
--Imagenes en forma de sheet
botonnormal = graphics.newImageSheet( "buttonstart.png", { width=340, height=338, numFrames=2 } )
botonapretado = graphics.newImageSheet ( "buttonstart.png", { width=340, height=338, numFrames=2 } )
--Simulacion de andar del personaje
local movboton
local seqBoton = {
{ name="normal", sheet=botonnormal, start=1, count=1, time=1000},
{ name="apretado", sheet=botonapretado, start=2, count=2, time=1100} --, loopCount =0
}
--Iniciamos
movboton = display.newSprite(botonnormal, seqBoton)
movboton.x = display.contentWidth / 2
movboton.y = display.contentHeight / 2
movboton.xScale = .5
movboton.yScale = .5
mybutton = display.newImage("button.png")
mybutton.x = display.contentWidth /2
mybutton.y = display.contentHeight -75
mybutton.xScale = .3
mybutton.yScale = .3
btninvisible = display.newImage("botonopacityzero.png")
btninvisible.x = display.contentWidth /2
btninvisible.y = display.contentHeight /2
btninvisible.xScale = .5
btninvisible.yScale = .5
btninvisible.alpha = 0.2 --opacidad
end
function start(event)
if event.phase == "began" then
--print("start")
storyboard.gotoScene("game", "fade", 400)
end
end
local function apretato(event)
--print("apretado")
if event.phase == "began" then
print("start")
--storyboard.gotoScene("game", "fade", 400)
movboton:setSequence( "apretado" )
movboton:play()
end
end
function scene:enterScene(event)
--background:addEventListener("touch", start)
mybutton:addEventListener( "touch", start )
btninvisible:addEventListener( "touch", apretato )
end
function scene:exitScene(event)
--background:removeEventListener("touch", start)
mybutton:removeEventListener( "touch", start )
--mybutton.destroy()
mybutton:removeSelf()
mybutton = nil
end
function scene:destroyScene(event)
end
scene:addEventListener("createScene", scene)
scene:addEventListener("enterScene", scene)
scene:addEventListener("exitScene", scene)
scene:addEventListener("destroyScene", scene)
return scene
答案 0 :(得分:3)
据我所知,从未将movboton
设置为任何内容,当您尝试拨打nil
时,自然会movboton:setSequence( "apretado" )
。无论你把它放在哪里,我都没有看到任何类似的调用会在这段代码中起作用......
如果您需要更多帮助,请显示更多代码。如果有一个工作的情况和它不起作用的情况,那么包括两者,以便我们可以比较。
两种情况下是否都有以下代码?
movboton = display.newSprite(botonnormal, seqBoton)
movboton.x = display.contentWidth / 2
movboton.y = display.contentHeight / 2
movboton.xScale = .5
movboton.yScale = .5
你的原帖不存在。如果没有该代码,您将收到错误。当您包含上面显示的代码时,它是否仍然失败并出现相同的错误?当您尝试运行它时,是否可以完全按照文件中的方式显示整个代码?
好的,现在很明显为什么它是nil
:
movboton
变量在local
函数中声明为 createScene
:
function scene:createScene(event)
...
local movboton
...
end
local
关键字告诉Lua此变量仅在上面的函数中 。这意味着如果您尝试从外部那个功能访问movboton
,那么Lua将无法找到它。就Lua而言,movboton
代码块之外没有名为createScene
的变量。
您的movboton:setSequence( "apretado" )
行 createScene
函数,因此,就Lua而言,此时没有变量movboton
在代码中,所以你得到的是nil
(意思是什么)。
您需要做的是更改代码,以便从movboton
函数中看到apretato
。最简单的方法是将local movboton
行移至local scene = storyboard.newScene()
下方
local storyboard = require("storyboard")
local scene = storyboard.newScene()
local movboton
如果在那里声明它,那么它在包含apretato
的范围内声明,这意味着apretato
将能够看到它。
You can read more about scopes in Lua here.范围是一个在或多或少所有编程语言中都非常重要的概念,因此花时间并尝试理解它们的工作原理是值得的。
祝你好运:)