2013-06-20 38 views
4

如何清除「game.lua」中的所有對象,當我離開遊戲場景時,所有數據仍在屏幕上,當我離開時如何刪除所有內容並將其重置爲開始當我回到'game.lua'時的位置?清潔數據表單場景

game.lua:

local storyboard = require("storyboard") 
local scene = storyboard.newScene() 
_W = display.contentWidth 
_H = display.contentHeight 
system.setIdleTimer(false); -- Prevent the app from becoming suspended 
local physics = require "physics" 
physics.start() 
clouts = true 
score = 0 
speeda1 = 100 
speedb1 = 150 

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

function scene:enterScene(event) 
local group = self.view 
--start drop zone 
if clouts then 

local badclout1 = {} 
local bad1Group = display.newGroup() 
local function spawnBC1() 
    local badclouts1 = display.newImage("BCloud1.png") 
    badclouts1.x = math.random(0, _W) 
    physics.addBody(badclouts1, "dynamic", { density=.1, bounce=.1, friction=.2, radius=45 })  
    badclouts1.name = "BCloud1" 
    badclouts1.bodyType = "kinematic" 
    badclouts1.isSensor = true 
    badclouts1.y = math.random(-100, -50) 
    badclouts1.index = #badclout1 + 1 
    bad1Group:insert(badclouts1) 
    badclouts1.rotation = math.random(-10,10) -- Rotate the object 
    badclouts1:setLinearVelocity(0, math.random(speeda1, speedb1)) -- Drop down 
    badclout1[badclouts1.index] = badclouts1 
    tmrSpawn1 = timer.performWithDelay(math.random(spawna, spawnb), spawnBC1) 
return badclouts1 
end 
tmrSpawn1 = timer.performWithDelay(math.random(1000, 10000), spawnBC1) 
local function removeBomb() 
    for i, v in pairs(badclout1) do 
    if badclout1[i].y >1000 then 
     badclout1[i]:removeSelf() 
     badclout1[i] = nil 
    end 
    end 
end 
Runtime:addEventListener("enterFrame", removeBomb) 

end 
-- end drop zone 

local function speatTimer() 
    speeda1 = speeda1+1 
    speedb1 = speedb1+1 
end 
local mainTimer = timer.performWithDelay(550, speatTimer, 200) 

function gameOver() 
    storyboard.gotoScene("restart", "fade", 400) 
end 

end 

function scene:exitScene(event) 
    local group = self.view 
    Runtime:removeEventListener("collision", onCollision) 
    Runtime:removeEventListener("accelerometer", onTilt) 
    Runtime:removeEventListener("enterFrame", removeBomb) 
end 


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

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

scene:addEventListener("createScene", scene) 
scene:addEventListener("enterScene", scene) 
scene:addEventListener("exitScene", scene) 
scene:addEventListener("destroyScene", scene) 
scene:addEventListener("overlayEnded", scene) 
return scene 

問候凱文,

回答

2

,如果你使用的是故事板,並要重置所有值你到另一個場景之前,所以當你又來了,你可以刪除場景相同場景你去到現場後都將被創建

function scene:exitScene(event) 
    local group = self.view 
    Runtime:removeEventListener("collision", onCollision) 
    Runtime:removeEventListener("accelerometer", onTilt) 
    Runtime:removeEventListener("enterFrame", removeBomb) 
    storyboard.removeScene("SCENE TO REMOVE") 
end 

或做

function scene:enterScene(event) 
storyboard.removeScene("SCENE TO REMOVE") 
end 

這裏是如何實現它的鏈接。 http://www.coronalabs.com/blog/2012/07/31/storyboard-scene-purging-vs-removal/

1

有重置回你的對象位置和可變數據

雙向的第一一個是創建這樣的函數

function resetGame() 
--your initial position and data values here 
end 

,並調用它時,你需要重新設置你的遊戲,但你會手動編碼重置值。

第二個一個是通過創建一個虛擬場景。一個虛擬場景是,將再次重定向你的遊戲場景這樣

虛擬場景

function scene:createScene(event) 
    local group = self.view 
    storyboard.gotoScene("scenes.Game") --scene/Game.lua 
end 

重置您的對象和變量的值,但不要忘了一個場景當您轉到虛擬場景時,刪除所有聽衆並將其放在exitScene()函數上。

1

由於您使用的故事板,爲什麼不直接插入你所有的顯示對象到組:

group:insert(someobject) 

,並讓現場經理做的工作適合你。通過不在場景中創建場景:createScene()您的屏幕過渡能力將無法工作。通過不將東西放入組中,當場景消失時它不能將它們移除。