【问题标题】:Corona SDK, Removing object from previous sceneCorona SDK,从前一个场景中移除对象
【发布时间】:2017-07-11 15:35:20
【问题描述】:

当场景结束时,“sendObject”函数结束,但是屏幕上剩余的显示对象,继续下一个场景,直到它们的过渡过程完成。我尝试将“object:removeSelf()”包含在场景:隐藏和完成游戏功能中,两者都导致零值错误。有什么建议吗?

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

【问题讨论】:

    标签: coronasdk


    【解决方案1】:

    试试

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

    来自电晕documentation

    请记住,您必须将场景显示对象插入到场景的 self.view 组。如果您创建显示对象但不插入它们 进入这个组,他们将驻留在作曲台前, 它们不会被视为场景的一部分。对于显示对象 它应该是场景的一部分并由 Composer “管理”——对于 例如,当场景被移除时清理——你必须插入它们 进入场景的 self.view 组

    【讨论】:

      猜你喜欢
      • 2017-07-14
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多