0
シーンが終了すると、「sendObject」機能は終了しますが、画面上の残りの表示オブジェクトは、遷移プロセスが終了するまで次のシーンに進みます。私は "object:removeSelf()"をscene:hideとfinishGame関数の両方に含めようとしましたが、どちらもnil値エラーに終わりました。助言がありますか?Corona SDK、前のシーンからオブジェクトを削除する
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