当场景结束时,“sendObject”功能结束,但屏幕上剩余的显示对象继续到下一个场景,直到它们的转换过程结束。我试过在场景中包含“object:removeSelf()”: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
答案 0 :(得分:1)
尝试
function sendObject()
object[objectCounter] = display.newImageRect(scene.view, "object.png", 40, 40)
...
来自Corona documentation
请记住,您必须将场景显示对象插入场景中 自我观点小组。如果创建显示对象但不插入它们 进入这个群体,他们将驻留在作曲家阶段和 他们不会被视为现场的一部分。用于显示对象 这应该是场景的一部分,由作曲家“管理” - 为 例如,在删除场景时清理 - 您必须插入它们 进入场景的self.view小组