Lua display.remove(obj)不起作用,为什么?(卢阿)
在这个程序中,当你点击物体月亮时,函数changeScene应该将场景从end.lua改为start.lua,以便重新启动游戏 但在一开始,月球仍然在显示器上。 因此,在changeScene中,我添加了display.remove moon,但它不起作用。 我试过moon:removeSelf和sceneGroup:remove3。 此外,我不知道为什么moon:removeSelf会出现以下错误:Lua display.remove(obj)不起作用,为什么?(卢阿),lua,remove,Lua,Remove,在这个程序中,当你点击物体月亮时,函数changeScene应该将场景从end.lua改为start.lua,以便重新启动游戏 但在一开始,月球仍然在显示器上。 因此,在changeScene中,我添加了display.remove moon,但它不起作用。 我试过moon:removeSelf和sceneGroup:remove3。 此外,我不知道为什么moon:removeSelf会出现以下错误: ERROR: Runtime error <br />
ERROR: Runtime error <br />
end.lua:13: attempt to index global 'moon' (a nil value) <br />
stack traceback: <br />
end.lua:13: in function '?' <br />
?: in function <?:190>
在Lua中,当我们处理一个函数时,无论何时我们要调用其中的变量,它都必须是局部的,但当我们在一个函数中调用它外部的变量时,它必须是全局的
删除moon变量声明中的局部变量,看看这是否解决了问题可以在函数内部使用局部变量 当然,函数定义的参数列表中的变量在函数的范围内。但也可以使用不在参数列表中的变量,前提是它们在函数定义时在范围内。在OP代码中,changeScene函数没有参数,因此在定义函数时,函数中使用的任何变量都必须在范围内。变量moon是一个局部变量,位于声明它的块的作用域中,位于定义点之后。所以,定义changeScene时,月亮不在范围内。解决此问题的一种方法是将moon的定义移动到changeScene定义之前的一个点:
local composer = require( "composer" )
local scene = composer.newScene()
-- create()
function scene:create( event )
local sceneGroup = self.view
local function changeScene()
--moon:removeSelf()
--sceneGroup:remove(3)
display.remove( moon )
--moon = nil
composer.removeScene("end")
composer.gotoScene( "start", {effect = "slideUp", time = 500} )
end
local text = display.newText(correctAnswers .. "/10 correct ", display.contentCenterX, 280 ,native.systemFont, 50)
text.y = display.contentCenterY-100
sceneGroup:insert(text)
local text2 = display.newText("Press the moon to RESTART ", display.contentCenterX, 280 ,native.systemFont, 20)
text2.x = display.contentCenterX
text2.y = display.contentCenterY+200
transition.blink( text2, { time=2500 } )
sceneGroup:insert(text2)
local floor = display.newImageRect( "floor.png", 300, 50 )
floor.x = display.contentCenterX
floor.y = display.viewableContentHeight+100
local moon = display.newImageRect( "balloon.png", 112, 112 )
moon.x = math.random( 40,display.contentWidth-40 )
moon.y = 50
moon.alpha = 0.8
local physics = require( "physics" )
physics.start()
physics.addBody( floor, "static" )
physics.addBody( moon, "dynamic", { radius=50, bounce=0.5 } )
moon:addEventListener( "tap", changeScene )
end
local moon = display.newImageRect("balloon.png", 112, 112)
moon.x = math.random(40,display.contentWidth - 40)
moon.y = 50
moon.alpha = 0.8
local function changeScene ()
display.remove(moon)
composer.removeScene("end")
composer.gotoScene("start", {effect = "slideUp", time = 500})
end