如何过渡场景?

时间:2014-09-26 04:40:24

标签: lua storyboard corona

我正在构建游戏,并且正在使用故事板。在enterScene上,我从另一个模块调用我的显示对象lilEnem。当我改变场景时,我无法将他从记忆中移除,我不知道如何将他插入到scene.view中,因为它是一个单独的文件。

function level1:enterScene()
local level1Group = level1.view
print( "enteredScene" )

local function goHome(event)
    storyboard.removeAll( )
    storyboard.gotoScene( "mainMenu" )
end

local function pauseUi (event)
    local pauseButton = display.newImage("assets/graphics/gameplay/UI/pause/pause.png", display.contentWidth- 25, 25)

    pauseButton:addEventListener( "tap", goHome )

    level1Group:insert( pauseButton )
end

pauseUi()
--Load and play game song when entered scene
--
--
gameAudio.gamePlay()

-- Spawns lilEnems
--
--
local function spawnLilEnem (event)
        -- Checking myData module for lilEnem ID
        --Storing in local id
        --
        --
        local id = myData.lilEnemId

        --lil Enem will spawn in time math.random gives
        --
        --
        --
        local randomSpawnTime = math.random(0,5000)


        --Calls spawnEnem Module
        --
        --
        lilEnem.spawnEnem(id)

        --Adds 1 to id to give each enem unique id
        --
        --
        myData.lilEnemId = myData.lilEnemId + 1

        --timer will call this function at random times
        --
        --
        local spawnEnemTimer = timer.performWithDelay( randomSpawnTime, spawnLilEnem, 1 )

        --When id reachs == number it will stop spawning enems
        --Number is the highest numbered lil Enem ID
        --This statement decides how many lilEnems spawn
        --
        --
        if id == 5 then
            timer.cancel( spawnEnemTimer )
        end
end
spawnLilEnem()

--Call score from scoreData module
--score = 0 in scoreDate module
--
--
local score = display.newText(scoreData.score, display.contentWidth/2, 50, nil, 30)

2 个答案:

答案 0 :(得分:0)

首先,您需要使用Composer,因为Storyboard将被弃用。有转换页面......这不是很难:

Storyboard to Composer Migration

当你调用composer.gotoScene(或Storyboard)时,你可以将params传递给那个场景:

 (main.lua)

 storyboard.gotoScene("MyScene", 
  { 
     params = 
        { 
           param1 = "something", 
           player = playerObj, etc. 
        } 
  }

然后,在被调用的场景中,在“show”方法中,您可以读取这些参数(此代码使用的是作曲家):

(MyScene.lua)

local scene = composer.newScene()

function scene:show(event)
  if event.phase == "did" then 
     if event.params then
       something = event.params.something
       player = event.params.player 
     end
  end
end

scene:addEventListener("show", scene)

return scene

答案 1 :(得分:0)

要在离开场景时删除项目,请使用exitScene()方法:删除事件侦听器,停止动画,暂停物理,删除对不再需要的显示对象的引用等。< / p>

要插入单独的视图,场景就像任何其他Lua模块一样,因此您可以调用执行该设置的模块的功能:

-- yourGotoScene.lua
local value -- hide it from other modules

function setValue(newValue)
    value = newValue
    print('setting value to new:', value)
end

-- yourCallingScene.lua
...
require 'yourGotoScene'
yourGotoScene.setValue(123)
storyboard.gotoScene('yourGotoScene')