Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua display.remove(obj)不起作用,为什么?(卢阿)_Lua_Remove - Fatal编程技术网

Lua display.remove(obj)不起作用,为什么?(卢阿)

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 />

在这个程序中,当你点击物体月亮时,函数changeScene应该将场景从end.lua改为start.lua,以便重新启动游戏

但在一开始,月球仍然在显示器上。 因此,在changeScene中,我添加了display.remove moon,但它不起作用。 我试过moon:removeSelf和sceneGroup:remove3。 此外,我不知道为什么moon:removeSelf会出现以下错误:

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