在运行时函数中无法在组内插入对象。

在我的游戏中,我必须在运行时函数中向组中插入一个对象,但终端返回了“尝试调用方法'insert'(空值)”的错误信息。

出问题的代码是:

function onCollision( event )
    if ( event.phase == "began" ) then
            if event.object1.myName == "ob1" and event.object2.myName == "spaceShip" then
                Runtime:removeEventListener( "enterFrame", onCollision )
                timer.cancel(tmrScore)
                gameOver.alpha = 1
                tapToReplay.alpha = 1
                replay.alpha = 0.01
                fade.alpha = 0
                timer.cancel(tmrIS)
                spaceShip.alpha = 1
                if(playEffects) then
                    media.playEventSound( "sounds/gameover.mp3" )
                    playEffects = false
                end
                speed = 0

                local matchScore = score.get()
                local bestScore = score.load()

                if (matchScore < bestScore) then

                    local best = display.newText("Best:", _W/2, 215, "PUSAB",      16)
                    best.alpha = 1
                    best:setFillColor(1, 0.5, 0)
                    localGroup:insert(best)

                    local scoreToBeat = display.newText(score.load(),   _W/2, 250, "PUSAB", 16)
                    scoreToBeat.alpha = 1
                    scoreToBeat:setFillColor(127, 255, 0)
                    localGroup:insert(scoreToBeat)

                else
                    print ("New Record!!")
                    score.save()
                    print (score.load())
                    best.alpha = 0
                    local bestScore = display.newText("New record!", _W/2, 215, "PUSAB", 16)
                    bestScore.alpha = 1
                    bestScore:setFillColor(255, 0, 0)
                end
            end

Runtime:addEventListener( "collision", onCollision )

我在localGroup:insert(best)localGroup:insert(scoreToBeat)处收到错误。

我该怎么办?

点赞
用户2895078
用户2895078

你需要使你的本地组 localGrouponCollision 事件处理函数中可访问。

最简单的解决方案如下:

将本地组可见化至整个文件范围内。为了做到这点,你需要在 collision 函数作用域开始前声明本地组变量 localGroup:

local localGroup = nil

function onCollision(event)
   etc

一旦你这样做了,如果 localGroup 是一个 storyboard 组,你将需要在 createScene storyboard 处理程序中分配你的组(如果你正在使用 storyboard),这样在 onCollision 中,显示组将可见:

-- Called when the scene's view does not exist:
function scene:createScene( event )
    localGroup = self.view

如果本地组变量不是一个 storyboard 组,而是通过 display.newGroup() 函数创建的,则只需要这样声明:

local localGroup = display.newGroup()

function onCollision(event)
   etc
2014-04-01 11:05:37