清洗场景数据

当我离开游戏场景时,如何从“game.lua”中清除所有对象,所有数据仍然显示在屏幕上,当我回到“game.lua”时如何将它们全部删除并重置到开始位置?

game.lua:

local storyboard = require(“storyboard”)
local scene = storyboard.newScene()
_W = display.contentWidth
_H = display.contentHeight
system.setIdleTimer(false);--防止应用程序被挂起
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
-开始落区
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 =“运动学”
   badclouts1.isSensor =真
   badclouts1.y = math.random(-100,-50)
   badclouts1.index =#badclout1 + 1
   bad1Group:insert(badclouts1)
   badclouts1.rotation = math.random(-10,10)--旋转对象
   badclouts1:setLinearVelocity(0,math.random(speeda1,speedb1)) - 下降
   badclout1 [badclouts1.index] = badclouts1
   tmrSpawn1 = timer.performWithDelay(math.random(spawna,spawnb),spawnBC1)
返回 badclouts1
end
tmrSpawn1 = timer.performWithDelay(math.random(1000,10000),spawnBC1)
 局部函数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 
--结束掉落区

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:addEventListener(“enterScene”,场景)
scene:addEventListener(“exitScene”,场景)
scene:addEventListener(“destroyScene”,场景)
scene:addEventListener(“overlayEnded”,场景)
return scene

谢谢,Kevin,

点赞
用户1682268
用户1682268

如果你正在使用故事板并希望重置所有值,你可以在进入另一个场景之前删除当前场景,这样当你再次进入相同场景时,所有内容将被重新创建。

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/

2013-06-21 01:13:23
用户1605727
用户1605727

有两种方法可以重置对象位置和变量数据。

第一种方法是创建一个如下所示的函数:

function resetGame()
--在此处放置初始位置和数据值
end

每当需要重置游戏时,请调用它,但您需要手动编写重置值。

第二种方法是创建一个虚拟场景。 虚拟场景是一个场景,将你重定向回游戏场景,如下所示:

虚拟场景

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

重置对象和变量的值,但不要忘记在进入虚拟场景时将所有侦听器删除并将其放在exitScene()函数上。

2013-06-21 02:01:27
用户1870706
用户1870706

既然你正在使用 storyboard,为什么不把所有的显示对象插入到组中呢:

 group:insert(someobject)

然后让场景管理器为你完成工作。如果不在scene:createScene()中创建场景,则无法进行屏幕转换。如果不把物体放到组中,当场景消失时,它无法为你删除它们。

2013-07-01 01:00:48