在corona中重新加载屏幕

我正在使用 corona 开发一个应用程序,在这个过程中我需要不断地重新加载同一个屏幕。我不知道该如何实现,请有经验的人提供示例代码来帮助我。

原文链接 https://stackoverflow.com/questions/7962749

点赞
stackoverflow用户1025151
stackoverflow用户1025151
  1. 导演类

2) main.lua

display.setStatusBar (display.HiddenStatusBar)
--> 隐藏状态栏

local director = require ("director")
--> 导入导演类

local mainGroup = display.newGroup()
--> 创建主组

local function main()
--> 添加主函数

    mainGroup:insert(director.directorView)
    --> 添加导演类的组

    director:changeScene("myscene")
    --> 切换场景,无特效

    return true
end

main()

3) myscene.lua

module(..., package.seeall)

function new()
    local localGroup = display.newGroup()

    local redbutton = display.newImage ("redbutton.png")
    redbutton.x = 160
    redbutton.y = 100
    localGroup:insert(redbutton)

    local function pressRed (event)
        if event.phase == "ended" then
            director:changeScene ("reloader")
        end
    end

    redbutton:addEventListener ("touch", pressRed)

    return localGroup
end

4) reloader.lua

module(..., package.seeall)

function new()
    local localGroup = display.newGroup()

        local function listener( event )
            director:changeScene ("myscene", "fade")
        end

        timer.performWithDelay(50, listener )

        return localGroup
end
2011-11-02 08:31:02
stackoverflow用户909233
stackoverflow用户909233

Storyboard API 自从 2011.678 版本开始提供。

以下是一个示例,使用 2011.704 版本的 Storyboard API

每次触摸都会重新加载整个场景。

--main.lua
module(...,package.seeall)
local storyboard=require("storyboard")
local scene=storyboard.newScene()
scene.name="scnMenu"

function scene:createScene(event)
    local group=self.view
    bg=display.newRect(0,0,100,100)
    group:insert(bg)
end

function scene:enterScene(event)
    Runtime:addEventListener("touch",onTouch)
end

function onTouch(event)
    storyboard.gotoScene("main","fade",1000)
end

function scene:exitScene(event)
    Runtime:removeEventListener("touch",onTouch)
end

function scene:destroyScene(event)
end

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

return scene
2012-01-16 08:05:01
stackoverflow用户1213470
stackoverflow用户1213470

我不确定,但我的游戏使用相同的 lua 文件来更改场景。

myscene.lua

director:changeScene("myscene")

2012-07-20 07:00:54
stackoverflow用户889843
stackoverflow用户889843

我尝试了另一种方法,对我有效,示例如下 -

步骤1 - 创建一个对象,例如 - local reloadScene

步骤2 - 当需要重新加载场景时应用步骤2 - reloadScene =“YES” storyboard.reloadScene(“eventsButtonClicked”)

步骤3 - 当不需要重新加载场景时应用步骤3 - function scene2a:exitScene( event ) if reloadScene ==“YES” then storyboard.purgeScene(“eventsButtonClicked”) reloadScene =“NO” end end scene2a:addEventListener(“exitScene”,scene2a)

2013-04-04 10:00:53
stackoverflow用户2753334
stackoverflow用户2753334

我认为你应该按照下面的步骤来重载/重新启动 storyboard 场景在 Corona 中。

步骤 1:创建一个函数或者一行代码,从你想要重新加载或重新启动的 storyboard 类重新加载/重新启动相同的场景。

function forRestart(event)
if(event.phase == "ended") then
   local current_scene_name = storyboard.getCurrentSceneName()
   **storyboard.gotoScene( "reload", "fade", 250 )**
return true;
end

步骤 2:创建一个名为 reload 的 lua 文件。下面是 reload.lua 文件的模板。

local storyboard = require( "storyboard" )
local scene = storyboard.newScene()

-- 当场景的视图不存在时调用:
function scene:createScene( event )
    local group = self.view
end

-- 场景移动上屏后立即调用:
function scene:enterScene( event )
    local group = self.view
    -- 清除关卡
    local previous_scene_name = storyboard.getPrevious()
    print("previous",previous_scene_name)
    -- storyboard.removeScene(previous_scene_name)
    storyboard.purgeScene( previous_scene_name )
    -- 从头开始加载关卡
    storyboard.gotoScene( previous_scene_name, "fade", 250 )
end

-- 场景即将移动离屏时调用:
function scene:exitScene( event )
    local group = self.view
end

-- 如果场景视图被删除,则在场景卸载之前将会调用 scene:destroyScene()
function scene:destroyScene( event )
    local group = self.view
end

-- 如果场景的视图不存在,"createScene" 事件将会被分发
scene:addEventListener( "createScene", scene )

-- 当场景过渡完成时,"enterScene" 事件被分发
scene:addEventListener( "enterScene", scene )

-- 除了下一个场景过渡开始之前,"exitScene" 事件也会被分发
scene:addEventListener( "exitScene", scene )

-- 在视图被卸载之前,在内存不足的情况下自动卸载,或者通过调用 storyboard.purgeScene() 或 storyboard.removeScene() 显式卸载时,"destroyScene" 事件也会被分发。
scene:addEventListener( "destroyScene", scene )

return scene
2014-01-09 05:20:43
stackoverflow用户2409015
stackoverflow用户2409015

你也可以使用以下方法重新加载相同的屏幕:

timer.performWithDelay(500, function()
    director:changeScene("your scene name")
end);

但在调用上述函数之前,您需要从显示组中删除所有对象。

2014-03-11 10:09:45
stackoverflow用户4139780
stackoverflow用户4139780

你可以创建一个重新加载场景的代码, 并且通过调用它来重新加载任何场景。 就像这样:

composer.gotoScene("Scene.Reload",
    {
        params = 
        {
            reloadSceneOptions = 
            {
                effect = "slideLeft",
                time = 500,
            },
            reloadSceneName = SceneName
        }
    })

而你的重新加载场景代码应该像这样:

elseif phase == "did" then
    local reloadSceneOptions = event.params.reloadSceneOptions
    local reloadSceneName = event.params.reloadSceneName

    composer.removeScene(reloadSceneName)
    composer.gotoScene(reloadSceneName, reloadSceneOptions)
end
2016-08-02 06:28:21