Corona SDK,从上一个场景中删除对象

Corona SDK, Removing object from previous scene

当场景结束时,"sendObject"函数结束,但是屏幕上剩余的显示对象继续到下一个场景,直到它们的过渡过程完成。我已经尝试将 "object:removeSelf()" 包含在 scene:hide 和 finishGame 函数中,两者都导致了 nil 值错误。有什么建议吗?

local composer = require("composer")
local scene = composer.newScene()
local physics = require("physics")
local gameData = require("gamedata")
physics.start()
local player
local object = {}
local gameIsOver = false;
local objectCounter = 1
local objectFrequency = 2500
local objectTmr
local numberOfLives = 1


function scene:create(event)
    local group = self.view

    sendObject()
end

function scene:show(event)
    local phase = event.phase
    local previousScene = composer.getSceneName("previous")
    composer.removeScene(previousScene)
    local group = self.view
    if ( phase == "did" ) then
        Runtime:addEventListener("collision", onCollision)
    end
end

function scene:hide(event)
    local phase = event.phase
    local group = self.view
    if ( phase == "will" ) then
        Runtime:removeEventListener("collision", onCollision)
        timer.cancel(objectTmr)
    end
end

function sendObject()
    object[objectCounter] = display.newImageRect("object.png", 40, 40)
    object[objectCounter].name = "object"
    object[objectCounter].x = math.random(5, 475)
    object[objectCounter].y = -125
    physics.addBody(object[objectCounter])
    object[objectCounter].bodyType = "kinematic"

    transition.to(object[objectCounter], {y=display.contentHeight+object[objectCounter].height+20, time=8500, onComplete=function(self) display.remove(self); end})

    objectCounter = objectCounter + 1
    if(objectCounter%2 == 0) then
        objectFrequency = objectFrequency - 200
        if(objectFrequency < 800) 
            then objectFrequency = 800
        end
        timer.cancel(objectTmr)
        objectTmr = timer.performWithDelay(objectFrequency, sendObject, 0)
    end
end
objectTmr = timer.performWithDelay(objectFrequency, sendObject, 0)

function onCollision(event)
    if ( event.phase == "began" ) then
        if(event.object1.name == "player" and event.object2.name == "object") then
            canMove = false
            numberOfLives = 0
            finishGame()
        end
        if(event.object1.name == "object" and event.object2.name == "player") then
            canMove = false
            numberOfLives = 0
            finishGame()
        end
    end
end

function finishGame()
    gameIsOver = true
    numberOfLives = numberOfLives - 1
    if(numberOfLives <= 0) then
        composer.gotoScene("gameover")
    end
end

function scene:destroy(event)

end

scene:addEventListener( "create", scene )
scene:addEventListener( "show", scene )
scene:addEventListener( "hide", scene)
scene:addEventListener( "destroy", scene)


return scene

尝试

function sendObject()
    object[objectCounter] = display.newImageRect(scene.view, "object.png", 40, 40)
...

来自科罗纳 documentation

Remember that you must insert scene display objects into the scene's self.view group. If you create display objects but do not insert them into this group, they will reside in front of the Composer stage and they will not be regarded as part of the scene. For display objects which should be part of the scene and "managed" by Composer — for example, cleaned up when the scene is removed — you must insert them into the scene's self.view group