【发布时间】: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